fgets 无法正常工作
fgets not working properly
我想了解 fgets 的工作原理。为此,我编写了代码以在每一行之前打印 "hi",这将使用 fgets 从另一个名为 input.txt 的文本文件中打印出来。
但它在连续行之间显示 2 hi
秒而不是 1 秒。我不明白为什么?
我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char singleline[150];//storing each line of input.txt as singleline arrays.
FILE *fp;//file pointer named fp.
fp=fopen("input.txt","r");//reading the text file input.txt
while (!feof(fp)){
fgets(singleline,150,fp);
printf("hi\n");// to check that before each line hi is printed?
puts(singleline);
}
return 0;
}
我的文本文件
rohit sharma,batsman,1,35.0,40.0,2200,20,95
viru,batsman,2,28.0,45.0,1800,02,75
suresh raina,batsman,3,38.0,35.0,2300,15,98
suryaky,batsman,4,30.0,0.0,500,0,10
abd,batsman,5,37.2,0.0,1200,0,50
dhoni,batsman,6,45.2,0.0,2100,0,85
albie,allrounder,7,24.87,27.65,945,80,86
ashwin,bowler,8,8.82,24.37,150,82,85
naraine,bowler,9,6.67,16.94,40,67,49
johnson,bowler,10,12.25,21.33,98,45,33
starc,bowler,11,14.17,28.71,85,14,14
输出
hi
rohit sharma,batsman,1,35.0,40.0,2200,20,95
hi
hi
viru,batsman,2,28.0,45.0,1800,02,75
(till the end)
johnson,bowler,10,12.25,21.33,98,45,33
hi
hi
starc,bowler,11,14.17,28.71,85,14,14
这里有什么错误?
您发布的内容提供:
hi
rohit sharma,batsman,1,35.0,40.0,2200,20,95
hi
viru,batsman,2,28.0,45.0,1800,02,75
正如预期的那样,因为您没有吃掉尾随的换行符。您可以通过在阅读 singleline
.
后添加此行来完成
if(strlen(singleline) != 0) // because you may have an empty file
singleline[strlen(singleline) - 1] = '[=11=]';
您也可以按照 alk 的建议进行操作:
singleline[strcspn(singleline, "\n")] = 0;
摘自 this 答案。
此外,while 循环的控制语句中的 feof()
让我将您重定向到这个问题:Why is while ( !feof (file) ) always wrong?
感谢 alk 和 iharob 的有用评论。
我想了解 fgets 的工作原理。为此,我编写了代码以在每一行之前打印 "hi",这将使用 fgets 从另一个名为 input.txt 的文本文件中打印出来。
但它在连续行之间显示 2 hi
秒而不是 1 秒。我不明白为什么?
我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char singleline[150];//storing each line of input.txt as singleline arrays.
FILE *fp;//file pointer named fp.
fp=fopen("input.txt","r");//reading the text file input.txt
while (!feof(fp)){
fgets(singleline,150,fp);
printf("hi\n");// to check that before each line hi is printed?
puts(singleline);
}
return 0;
}
我的文本文件
rohit sharma,batsman,1,35.0,40.0,2200,20,95
viru,batsman,2,28.0,45.0,1800,02,75
suresh raina,batsman,3,38.0,35.0,2300,15,98
suryaky,batsman,4,30.0,0.0,500,0,10
abd,batsman,5,37.2,0.0,1200,0,50
dhoni,batsman,6,45.2,0.0,2100,0,85
albie,allrounder,7,24.87,27.65,945,80,86
ashwin,bowler,8,8.82,24.37,150,82,85
naraine,bowler,9,6.67,16.94,40,67,49
johnson,bowler,10,12.25,21.33,98,45,33
starc,bowler,11,14.17,28.71,85,14,14
输出
hi
rohit sharma,batsman,1,35.0,40.0,2200,20,95
hi
hi
viru,batsman,2,28.0,45.0,1800,02,75
(till the end)
johnson,bowler,10,12.25,21.33,98,45,33
hi
hi
starc,bowler,11,14.17,28.71,85,14,14
这里有什么错误?
您发布的内容提供:
hi
rohit sharma,batsman,1,35.0,40.0,2200,20,95
hi
viru,batsman,2,28.0,45.0,1800,02,75
正如预期的那样,因为您没有吃掉尾随的换行符。您可以通过在阅读 singleline
.
if(strlen(singleline) != 0) // because you may have an empty file
singleline[strlen(singleline) - 1] = '[=11=]';
您也可以按照 alk 的建议进行操作:
singleline[strcspn(singleline, "\n")] = 0;
摘自 this 答案。
此外,while 循环的控制语句中的 feof()
让我将您重定向到这个问题:Why is while ( !feof (file) ) always wrong?
感谢 alk 和 iharob 的有用评论。