0

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

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

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

4 回答 4

5

更改'\n'EOF。当您想读到文件末尾时,您正在读到行尾(EOF 是 stdio.h 中的一个宏,它对应于文件末尾的字符)。

免责声明:我不声明该方法的安全性。

于 2011-01-28T23:34:29.247 回答
3

'\n' 是换行符(换行符),因此当到达第一行末尾时循环将终止。文件的结尾由文件结束 (EOF) 字符标记。包含 getchar() 函数的 cstdio(或 stdio.h)定义了 EOF 常量,因此只需将 while 行更改为

而((c = getchar())!= EOF)
于 2011-01-28T23:38:32.427 回答
0

man页面:“从流中读取下一个字符并将其作为无符号字符转换为 int 或文件末尾的 EOF 或错误返回。” EOF是一个宏(通常为 -1),用于返回 this 和指示文件结束的相关函数。您想检查这是否是您要返回的内容。请注意,它getc返回一个有符号整数,但有效值是无符号字符转换为整数。如果 c 是有符号字符怎么办。

于 2011-01-28T23:40:45.007 回答
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)

于 2011-01-29T01:09:41.947 回答