C编程: End of file - operation

标签 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", 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 7

3 4 5 6
4 5 6 7

但我想要输出如下:

输出

1 2 3 4
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]));

对此:

            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/

相关文章:

c - 竞争条件场景

c - Sublime Text C 插件——代码模板和自动完成

c - 编写用于 R 的 C 函数时究竟需要保护什么

c - libpcap 数据包嗅探 流量分析

c - 需要分层文本数据结构解析器建议

c - C 中的链表 : Having issues with entering string and displaying it

c++ - x64 位的 C++/CLI DLL 和 Exe 应用程序崩溃

c - 当我在 linux 下的 c 套接字中使用 read() 和 write() 时尺寸缩小

在 Makefile 中有条件地定义变量

c - 将给定链表的反向存储到另一个链表中