好的,所以我有一个输入文件,我可以成功计算每行中的单词和字符的数量。当我使用下面的代码到达行尾时,它会退出循环并仅读取第一行。如何继续输入下一行以继续程序?
编辑:我必须分别解析每一行,所以我不能使用 EOF
while( (c = getchar()) != '\n')
更改'\n'
为EOF
。当您想读到文件末尾时,您正在读到行尾(EOF 是 stdio.h 中的一个宏,它对应于文件末尾的字符)。
免责声明:我不声明该方法的安全性。
'\n' 是换行符(换行符),因此当到达第一行末尾时循环将终止。文件的结尾由文件结束 (EOF) 字符标记。包含 getchar() 函数的 cstdio(或 stdio.h)定义了 EOF 常量,因此只需将 while 行更改为
而((c = getchar())!= EOF)
从man
页面:“从流中读取下一个字符并将其作为无符号字符转换为 int 或文件末尾的 EOF 或错误返回。” EOF
是一个宏(通常为 -1),用于返回 this 和指示文件结束的相关函数。您想检查这是否是您要返回的内容。请注意,它getc
返回一个有符号整数,但有效值是无符号字符转换为整数。如果 c 是有符号字符怎么办。
嗯,\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)