【发布时间】:2014-11-19 04:23:37
【问题描述】:
基本上我需要扫描这个文件中的所有值......它几乎可以这样做,但它似乎跳过了随机值,所以它最终没有正确排列。 (这只是我需要为作业做的一部分,所以你不会“放弃答案”,我仍然想自己解决,只需要一点帮助来解决这个问题,因为我卡住了)
代码如下:
int main()
{
FILE *fp;
char x[15];
float ID [1000];
int i=0, j=0;
float homework [1000];
float lab [1000];
float midterm [1000];
float Final [1000];
int count=0;
char headers[35];
char y;
fp= fopen("lab5_inputFile.txt", "r");
while (fscanf(fp, "%s", x)!=EOF){
if (count > 728){
fscanf(fp, "%f", &ID[i]);
printf("ID : %.1f\n", ID[i]);
fscanf(fp, "%f", &homework[i]);
printf("Homework: %.1f\n", homework[i]);
fscanf(fp, "%f", &lab[i]);
printf("lab: %.1f\n", lab[i]);
fscanf(fp, "%f", &midterm[i]);
printf("Midterm: %.1f\n", midterm[i]);
fscanf(fp, "%f", &Final[i]);
printf("Final: %.1f\n", Final[i]);
i++;
}
count ++;
}
printf("count = %d\n", count);
fclose(fp);
我只扫描了最后几个值以使其更易于阅读/调试,在实际代码中我只会跳过标题,在提交之前我还计划更改许多其他内容,就像我可能会使用指针类型和 malloc 而不是数组和其他一堆东西,但我的主要问题是如何解决我在从文件读取到数组时遇到的问题。
提前致谢!
【问题讨论】:
-
@Mohit Jain “fscanf 返回读取的字符数”不正确。
fscanf()返回转换的字段数或EOF。 -
养成阅读你正在使用的每个函数的文档的习惯(例如fscanf(3)...)。编译所有警告和调试信息 (
gcc -Wall -Wextra -g)。 使用调试器 (gdb)。您无需询问就可以找到您的问题! -
为什么代码忽略了前 728 次调用 fscanf() 的结果?
-
文件的第一行需要忽略,以下任何一行都不建议在顶部附近插入 fgets( ... );越过第一行。然后对 fscanf() 的所有以下调用都需要一个包含前导 ' ' 的格式字符串,因此所有空格都将被消耗/跳过此外,对 fscanf() 的每个调用都需要检查返回值以确保转换成功 I.E. if( 1 != fscanf( ... ) ) { // 处理错误 } 使用 '1' 因为所有对 fscanf() 的调用都只转换一个参数
-
值得定义一个结构,该结构包含要从文件中的每一行读取的每个项目的字段。然后定义一个包含 1000 个这些结构的数组的实例。这将清理代码并使其更容易跟踪(以及以后维护)代码中发生的事情)