文件流已打开,但没有任何内容打印到控制台。程序似乎没有“完成”

时间:2019-01-21 05:09:45

标签: c

我是C语言的新手,我正在尝试打开文件并逐行打印其内容到控制台。

源代码随附了几个屏幕快照,以显示我的情况。 (红色部分包含我的计算机的目录和个人信息)。从屏幕截图中可以看到,该程序在“之前”而不是“之后”打印。当然,它也不会从coc.txt中打印出任何内容。

我不知道为什么会这样。一切似乎都是正确的,我看不到任何错误。

#include <stdio.h>
#include <stdlib.h> // For exit()

const int MAX_LINE_LENGTH = 300;
int main() {

    FILE  *inputFile;
    inputFile = fopen("coc.txt", "r");
    char lineRead[MAX_LINE_LENGTH];
    printf("before\n");
    while(!feof(inputFile)) {
        fgets(lineRead, MAX_LINE_LENGTH, inputFile);
        puts(lineRead);
    }
    fclose(inputFile);
    printf("after\n");

}   

控制台

screenshot of IDE

coc.txt

screenshot of text editor

2 个答案:

答案 0 :(得分:2)

这是一个建议的替代方法(尚未测试):

#include <stdio.h>

#define MAX_LINE_LENGTH 300
#define NULL 0

int main(int argc, char *argv[]) {

    FILE  *inputFile;
    char fname[MAX_LINE_LENGTH], lineRead[MAX_LINE_LENGTH];

    /* Get filename from cmd-line */
    if (argc != 2) {
        printf ("USAGE: progname <fname>\n");
        return 1;
    }

    /* Try to open file */
    if ((inputFile = fopen("coc.txt", "r")) == NULL) {
        perror("Could not open file");
        return 2;
    }

    /* Now read the file, and echo back a line at a time */
    printf("before...\n");
    while(fgets(lineRead, MAX_LINE_LENGTH, inputFile) != NULL) {
        printf ("%s", lineRead);
    }
    printf("\n...after\n");

    /* Cleanup and exit */
    fclose(inputFile);
    return 0;
}

更改:

  1. 确保从main()处有一个“返回”。

    通常,相对于系统调用“ exit()”而言,优先选择main()中的“返回”。

  2. 读取输入,然后 检查EOF(fgets()== NULL)。

  3. 在阅读之前,请确保已打开文件。

  4. 不是从硬编码文件名,而是从命令行读取文件名。

  5. 我们使用的是printf(),而不是puts()(总是附加一个换行符,而不管字符串是否已经有换行符)。

答案 1 :(得分:0)

确保coc.txt文件和read.c文件位于同一文件夹中。我执行了您的原始代码,它在Windows 10上的VS 2017上运行良好。