int k;
char string[100];
for(k = 0; k < MAX_STATIONS; k++){
fgets(string,100,fp);
printf("%s", string);
}
所以我在这里得到了我的代码,当我尝试从文件中打印文本时,最后一行重复了10次。
195 11.00 2013 11 02 15 32 49.76668 234.97289 30
196 11.40 2013 11 02 15 32 49.70103 235.04120 30
197 7.30 2013 11 02 15 32 48.52185 236.57961 5
199 10.00 2013 11 02 15 32 48.39511 236.69492 5
200 8.50 2013 11 02 15 32 48.48800 236.67270 5 200 8.50 2013 11 02 15 32 48.48800 236.67270 5 200 8.50 2013 11 02 15 32 48.48800 236.67270 5 200 8.50 2013 11 02 15 32 48.48800 236.67270 5 200 8.50 2013 11 02 15 32 48.48800 236.67270 5
这是我的输出,任何帮助都将非常感激。另外,我想稍微澄清一下,我们如何处理fgets的中间部分(字符串,100,fp)(在这种情况下为100)。
由于
编辑:我似乎通过添加解决了这个问题if(feof(fp)) break;
这是一个有效的解决方案吗?
EDIT2:我还通过设置一个while循环检查它是否已经到达forloop中的流的末尾来解决它:
int k;
char string[100];
for(k = 0; k < MAX_STATIONS; k++){
while(!feof(fp)){
fgets(string,100,fp);
printf("%s", string);
//if(feof(fp)) break;
}
}
答案 0 :(得分:1)
解决问题的正确方法是测试输入操作;使用feof()
是可能的但不是必需的,并且需要小心谨慎。您使用feof()
显示的方式是wrong两种方式;你没有测试I / O操作,你引入了一个循环来占用k == 0
的整个输入,不为后续行留下任何内容。
int k;
char string[100];
for (k = 0; k < MAX_STATIONS; k++)
{
if (fgets(string, sizeof(string), fp) == 0)
break;
printf("%d: %s", k, string);
}
或者:
int k;
char string[100];
for (k = 0; k < MAX_STATIONS && fgets(string, sizeof(string), fp) == 0; k++)
printf("%d: %s", k, string);
请注意fgets()
会保留换行符(除非输入行太长而无法容纳)。
答案 1 :(得分:0)
阅读手册页http://www.cplusplus.com/reference/cstdio/fgets/
可能是明智之举如果确实返回了可能表明文件已用完的值