好的,所以我有一个输入文件,我计算每行中单词和字符的数量,并且成功。 当我使用下面的代码到达行尾时,它退出循环并且只读取第一行。如何继续下一行输入以继续该程序?
编辑:我必须分别解析每一行,所以我不能使用EOF
while( (c = getchar()) != '\n')
答案 0 :(得分:5)
将'\n'
更改为EOF
。当你想要读取直到文件末尾时(EOF是stdio.h中的宏,它对应于文件末尾的字符),你正在阅读直到行尾。
免责声明:我对该方法的安全性没有任何说法。
答案 1 :(得分:3)
'\ n'是换行符(换行符) - 字符,因此循环将在到达第一行结束时终止。文件末尾标有文件结尾(EOF)-characte。包含getchar() - 函数的cstdio(或stdio.h)定义了EOF -constant,所以只需将while行更改为
while( (c = getchar()) != EOF)
答案 2 :(得分:0)
从man
页面:“从流中读取下一个字符并将其作为无符号字符串转换为int,或者在文件末尾或错误时返回EOF。” EOF
是一个宏(通常为-1),用于返回指示文件结尾的此函数和相关函数。你想检查这是否是你要回来的。请注意getc
返回一个signed int,但有效值是转换为int的无符号字符。如果c是签名字符,该怎么办?
答案 3 :(得分:0)
嗯, \ n 字符实际上是两个字符的组合,两个字节: 第13个字节+第10个字节。你可以试试像,
int c2=getchar(),c1;
while(1)
{
c1=c2;
c2=getchar();
if(c1==EOF)
break;
if(c1==(char)13 && c2==(char)10)
break;
/*use c1 as the input character*/
}
这应测试两个输入字符是否形成正确的对联(13,10)