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

#include<stdio.h>//#defineEOF-1intmain(void){intc,i,nwhite,nother,ndigit[10];nwhite=n... #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;
}
~
这个程序问题出现在哪里?
展开
 我来答
guojingcha
2008-03-11 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.3万
采纳率:42%
帮助的人:1亿
展开全部
错在这里了。在C语言中EOF具有特定的含义,是文件结束的标志。而你在这里和getchar()放在一起,是想从键盘来判断是否结束,而键盘输入的字符ASCII码就没有EOF这个标志,所以就错了。
while((c=getchar())!=EOF)
即使你前面定义了EOF://#define EOF -1
这也是错的。因为所有字符的ASCII码都是正的,根本就没有-1这个字符。
你可以使用一个特殊的字符作为结束的标志,比如回车,那么那就应该改成这样的:
while((c=getchar())!=13)
回车的ASCII码就是13。
jizj06
2008-03-11 · TA获得超过203个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:125万
展开全部
楼上说的有道理,你没有从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使用在文件中的 而不是屏幕输出的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guoyaoxing88
2008-03-24 · 超过26用户采纳过TA的回答
知道答主
回答量:95
采纳率:0%
帮助的人:0
展开全部
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; }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式