C 语言,文件结束符 EOF问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 19:50:16
#include<stdio.h>
//#define EOF -1
int main(void)
{
int c,i,nwhite,nother,ndigit[10];

nwhite=nother=0;
for(i=0;i<10;i++)
ndigit[i]=0;

while((c=getchar())!=EOF)
{
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'\n':case'\t':nwhite++; break;
default:nother++; break; }
}
printf("digits=");
for(i=0;i<10;i++)
printf("%d",ndigit[i]);
printf(",white space=%d,other=%d\n",nwhite,nother);
return 0;
}
~
这个程序问题出现在哪里?

错在这里了。在C语言中EOF具有特定的含义,是文件结束的标志。而你在这里和getchar()放在一起,是想从键盘来判断是否结束,而键盘输入的字符ASCII码就没有EOF这个标志,所以就错了。
while((c=getchar())!=EOF)
即使你前面定义了EOF://#define EOF -1
这也是错的。因为所有字符的ASCII码都是正的,根本就没有-1这个字符。
你可以使用一个特殊的字符作为结束的标志,比如回车,那么那就应该改成这样的:
while((c=getchar())!=13)
回车的ASCII码就是13。

楼上说的有道理,你没有从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使用在文件中的 而不是屏幕输出的

while((c=getchar())!='\n')
{
switch(c) {
case'0':case'1':case'2