从C中读取文件中的输入

时间:2011-01-28 23:31:29

标签: c getchar

好的,所以我有一个输入文件,我计算每行中单词和字符的数量,并且成功。 当我使用下面的代码到达行尾时,它退出循环并且只读取第一行。如何继续下一行输入以继续该程序?

编辑:我必须分别解析每一行,所以我不能使用EOF

while( (c = getchar()) != '\n')

4 个答案:

答案 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)