C 语言,文件结束符 EOF问题
发布网友
发布时间:2022-03-27 16:07
我来回答
共3个回答
热心网友
时间:2022-03-27 17:36
错在这里了。在C语言中EOF具有特定的含义,是文件结束的标志。而你在这里和getchar()放在一起,是想从键盘来判断是否结束,而键盘输入的字符ASCII码就没有EOF这个标志,所以就错了。
while((c=getchar())!=EOF)
即使你前面定义了EOF://#define EOF -1
这也是错的。因为所有字符的ASCII码都是正的,根本就没有-1这个字符。
你可以使用一个特殊的字符作为结束的标志,比如回车,那么那就应该改成这样的:
while((c=getchar())!=13)
回车的ASCII码就是13。
热心网友
时间:2022-03-27 18:54
楼上说的有道理,你没有从while((c=getchar())!=EOF)跳出去的可能
所以这个循环变成了死循环
不过你这个问题很难办的 因为你统计white space的时候包含了回车键
如果不包含的话 你可以改成这样
while((c=getchar())!='\n')
{
switch(c) {
case'0':case'1':case'2':case'3':case'4':
case'5':case'6':case'7':case'8':case'9':ndigit[c-'0']++ ;break;
case' ':case'\t':nwhite++; break;
default:nother++; break; }
}
如果你要统计回车 你可以用 & * 之类结束。。。EOF使用在文件中的 而不是屏幕输出的
热心网友
时间:2022-03-27 20:29
while((c=getchar())!='\n')
{
switch(c) {
case'0':case'1':case'2':case'3':case'4':
case'5':case'6':case'7':case'8':case'9':ndigit[c-'0']++ ;break;
case' ':case'\t':nwhite++; break;
default:nother++; break; }
}