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;
}
~
这个程序问题出现在哪里? 展开
//#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)
即使你前面定义了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使用在文件中的 而不是屏幕输出的
所以这个循环变成了死循环
不过你这个问题很难办的 因为你统计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':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; }
}
{
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; }
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询