我是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");
}
控制台
coc.txt
答案 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;
}
更改:
确保从main()处有一个“返回”。
通常,相对于系统调用“ exit()”而言,优先选择main()中的“返回”。
读取输入,然后 检查EOF(fgets()== NULL)。
在阅读之前,请确保已打开文件。
不是从硬编码文件名,而是从命令行读取文件名。
我们使用的是printf(),而不是puts()(总是附加一个换行符,而不管字符串是否已经有换行符)。
答案 1 :(得分:0)
确保coc.txt文件和read.c文件位于同一文件夹中。我执行了您的原始代码,它在Windows 10上的VS 2017上运行良好。