C编程:文件结束-操作
我试图检查,而不是结束文件在c编程 请任何人帮忙,我无法理解我在下面的代码中做错了什么。 它将最后一组行打印两次C编程:文件结束-操作,c,C,我试图检查,而不是结束文件在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
/* 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);
输入:
1234
2 3 4 5
3 4 5 6
4 5 6 7
输出:
1234
2 3 4 5
3 4 5 6
4 5 6 7
3 4 5 6
4 5 6 7
但我希望输出如下:
输出
1234
2 3 4 5
3 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]));
if(feof(fp))
break; // hit end-of-file while getting the array
这是:
for(i = n; i < N/p; i++)
for(j = m; j < M; j++)
fscanf(fp, "%d",&(A[i][j]));
为此:
while(1)
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
所以,您可以在读取或未读取数组之后,在对其执行任何操作之前,对文件结尾进行测试
不过,最好实际检查fscanf的返回值并处理任何错误条件,如文件结束。这就是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]));
if(feof(fp))
break; // hit end-of-file while getting the array
这是:
for(i = n; i < N/p; i++)
for(j = m; j < M; j++)
fscanf(fp, "%d",&(A[i][j]));
为此:
while(1)
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
所以,您可以在读取或未读取数组之后,在对其执行任何操作之前,对文件结尾进行测试
不过,实际上检查fscanf的返回值并处理任何错误条件(如文件结尾)会更好。什么是“大小”“A”、“n”、“n”、“m”的定义?什么是“大小”“A”、“n”、“n”、“m”的定义?+1顺便说一句,OP可能想看看@RichardJ.RossIII它是如何解决问题的?你需要检查fscanf和打印blk之间的EOF。顺便说一句,也许OP想看看@RichardJ.RossIII它是如何解决问题的?您需要检查fscanf和打印blk之间的EOF。