【发布时间】:2017-09-21 14:35:15
【问题描述】:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define N 50
struct Visitor
{
char name[20];
int y;
char pass[20];
int age;
int oku;
float price;
};
main()
{
struct Visitor Data[N];
FILE *fdata;
int i = 1;
fdata = fopen("data.txt", "r"); // read mode
if (fdata == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
else
{
while (EOF != fscanf(fdata, "%s\t,%d\t,%s\t,%d\t,%d\t,%.2f\n", Data[i].name, &Data[i].y, Data[i].pass, &Data[i].age, &Data[i].oku, &Data[i].price))
{
printf("%s\t,%d\t,%s\t,%d\t,%d\t,%.2f\n", Data[i].name, Data[i].y, Data[i].pass, Data[i].age, Data[i].oku, Data[i].price);
i++;
}
}
fclose(fdata);
return 0;
}
事实证明,我的文件的所有内容都显示在屏幕的左侧,然后在每一行都显示了一些垃圾值。我上面的编码有问题吗?我应该如何消除垃圾值?请帮忙..
【问题讨论】:
-
你为什么只比较
fscanf()s的返回值和EOF? -
显示
data.txt -
阅读
sscanf文档,了解它的返回值。仅针对EOF进行测试是不够的。您还必须检查sscanf是否成功解析了您要求它解析的所有项目。第一步,将返回值读取到变量中以简化操作。 -
@xing 说得有道理.. omg 我试了一整天后终于解决了我的问题,非常感谢,其他人也非常感谢
-
@chux 最好建议删除问题?