我知道这是一个简单的问题,但我不知道该如何解决。我正在学习文件,当我尝试读取文件时,它陷入了无限循环。这是我的代码:
int main()
{
FILE *p;
p = fopen("123.txt", "r");
char ar[150];
while(!feof(p))
{
fgets(ar, 150, p);
puts(ar);
}
fclose(p);
return 0;
}
答案 0 :(得分:2)
您需要这个:
#include <stdio.h>
int main()
{
FILE *p = fopen("data.txt11", "r");
if (p == NULL)
{
printf("File could not be opened.\n");
return 1;
}
char ar[150];
while (fgets(ar, 150, p) != NULL)
{
puts(ar);
}
fclose(p);
return 0;
}
答案 1 :(得分:2)
请勿使用feof()
,请参阅Why is “while ( !feof (file) )” always wrong?。
检查fopen()
的返回值是fopen()
是成功还是失败,如果fopen()
返回NULL
,则不要继续进行或不对它进行任何操作p
。例如
FILE *p = fopen("data.txt11", "r");
if (p == NULL) {
fprintf(stderr,"file doesn't exist\n");
return 0;
}
并检查fgets()
的返回值。在fgets()
的手册页中
返回值
fgets()
成功返回s
,错误返回NULL
或结束返回 未读取任何字符时发生文件丢失。
例如
char *ptr = NULL;
while( (ptr = fgets(ar,sizeof(ar), p)) != NULL) {
printf("%s",ptr);
/* fgets() copies \n t the end of buffer, if you don't want remove it by some logic */
}
关于fgets()
将在手册页上显示的内容
fgets()
从流中读取最多one less than size
个字符 和 将它们存储到s指向的buffer
中。阅读停止后EOF
或newline
。如果读取了换行符,则它将stored
放入缓冲区。