我正在尝试在 C 编程中检查文件是否结尾。
任何人都可以帮忙,我无法理解我在以下代码中做错了什么。 它打印最后一组行两次。
/* Reads the Input file. */
fp = fopen("matrix_p2.txt","r");
if(fp == NULL)
{
printf("*** ERROR: Could not open file matrix_p2.txt\n");
}
p = 2;
while(!feof(fp))
{
printf("n= %d, m= %d", n,m);
for(i = n; i < N/p; i++)
for(j = m; j < M; j++)
fscanf(fp, "%d",&(A[i][j]));
print_blk(A, n, m, N/p, M);
//n = n + N/p;
size[0] = N;
size[1] = M;
}
fclose(fp);
输入:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
输出:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 73 4 5 6
4 5 6 7
但我想要输出如下:
输出
1 2 3 4
2 3 4 53 4 5 6
4 5 6 7
最佳答案
这就是feof
的工作原理;它不会告诉您是否即将到达文件末尾,而是告诉您是否已经到达文件末尾。 (也就是说:它不会告诉您何时读完最后一个字符;它会告诉您何时读完最后一个字符过去。)最简单的解决方案是更改此设置:
while(!feof(fp))
对此:
while(1)
还有这个:
for(i = n; i < N/p; i++)
for(j = m; j < M; j++)
fscanf(fp, "%d",&(A[i][j]));
对此:
for(i = n; i < N/p; i++)
for(j = m; j < M; j++)
fscanf(fp, "%d",&(A[i][j]));
if(feof(fp))
break; // hit end-of-file while getting the array
这样您就可以在读取数组(或未读取)之后以及对数组进行任何操作之前测试文件结尾。/p>
(不过,实际检查 fscanf
的返回值并处理任何错误情况(例如文件结束符)会更好。)
关于C编程: End of file - operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935401/