VS写的代码,目的是从Sampldatafile.txt里读取数据然后放到DailySalesList,但是数据读取有问题,print出来第三个数据以及之后会乱码,不知道什么问题?代码如下:
include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PRODUCT_NAME_LEN 20
struct Date {
int month;
int day;
int year;
};
struct SingleSaleRecord {
int numberSold;
double salePrice;
struct Date saleDate;
};
struct DailySalesList { //array of daily product sale
char name[20];
int numberSold;
double salePrice;
struct Date saleDate;
};
void addSale(struct DailySalesList* sale, char* productName, struct SingleSaleRecord* saleRec) {
int i = 0;
while (sale[i].numberSold != 0) {
i++;
}
strcpy(sale[i].name, productName);
sale[i].numberSold = saleRec->numberSold;
sale[i].salePrice = saleRec->salePrice;
sale[i].saleDate.day = saleRec->saleDate.day;
sale[i].saleDate.month = saleRec->saleDate.month;
sale[i].saleDate.year = saleRec->saleDate.year;
//stepin的时候可以看到,当i=2时,不知道为什么sale[i].numbersold 被assign了一个值为1;所以具体是问什么呢?这是不会改的问题。
printf("%s %d %.2lf\n", sale[i].name, sale[i].numberSold, sale[i].salePrice);
}
int readSalesFile(FILE* fp, struct DailySalesList* dailySales)
{
int numberSalesRead = 0, valuesRead;
struct SingleSaleRecord saleRec = { 0 };
char productName[MAX_PRODUCT_NAME_LEN];
while (!feof(fp))
{
valuesRead = fscanf(fp, "%[^/]/%d/%lf/%d/%d/%d%*c", productName, &saleRec.numberSold, &saleRec.salePrice, &saleRec.saleDate.month, &saleRec.saleDate.day, &saleRec.saleDate.year);
if (valuesRead > 0) {
addSale(dailySales, productName, &saleRec);
numberSalesRead++;
}
}
return numberSalesRead;
}//do not modify 这个function是不能改变的,麻烦不要改谢谢!
void menuoptions(struct DailySalesList* sale, int maxsales) {
int i;
printf("DAY MONTH YEAR PRODUCT #SOLD PRICE\n");
i = 0;
while (i < maxsales) {
printf("%3.2d %5.2d %4d %10s %3d %5.2lf\n", sale[i].saleDate.day, sale[i].saleDate.month, sale[i].saleDate.year, sale[i].name, sale[i].numberSold, sale[i].salePrice);
i++;
}//print出来的数据不对,(应该是因为上面读数据出错的问题)不能正确显示所有数据, 需要的output是
/* DAY MONTH YEAR PRODUCT #SOLD PRICE
08 09 2021 geraniums 1 9.99
08 09 2021 bird of paradise 1 44.50
08 09 2021 tulips 12 3.99
09 09 2021 geraniums 6 9.99
09 09 2021 impatiens 12 2.00*/
putchar('\n');
}
int main(void) {
int numberSales;
struct DailySalesList sale = {0};
FILE* fp;
fp = fopen("SampleDataFile.txt", "r");
if (fp != NULL) {
numberSales = readSalesFile(fp, &sale);
fclose(fp);
menuoptions(&sale, numberSales);
}
else {
printf("Cannot read this file. Double check whether this file is exist.\n");
}
}//可以正常运行
需要的output是
DAY MONTH YEAR PRODUCT #SOLD PRICE
08 09 2021 geraniums 1 9.99
08 09 2021 bird of paradise 1 44.50
08 09 2021 tulips 12 3.99
09 09 2021 geraniums 6 9.99
09 09 2021 impatiens 12 2.00
求帮忙解答,实在想不出来了