C语言中的EOF,我的代码为什么要两个Ctrl+z才能停止
#include<stdio.h>intmain(){inta,sum1,sum2,c;c=sum1=sum2=0;while(c=getchar();c!=EOF){p...
#include <stdio.h>
int main()
{
int a,sum1,sum2,c;
c=sum1=sum2=0;
while( c=getchar();c!=EOF)
{
printf("input");
scanf("%d",&c);
if(c%2==0)
sum1=sum1+c;
else
sum2=sum2+c;
}
printf("he:%d\nhe1:%d\ncha:%d\n",sum2,sum1-sum2);
return (0);
} 展开
int main()
{
int a,sum1,sum2,c;
c=sum1=sum2=0;
while( c=getchar();c!=EOF)
{
printf("input");
scanf("%d",&c);
if(c%2==0)
sum1=sum1+c;
else
sum2=sum2+c;
}
printf("he:%d\nhe1:%d\ncha:%d\n",sum2,sum1-sum2);
return (0);
} 展开
2个回答
展开全部
看你的代码的意思,是想输入几个数,分别统计偶数和奇数的和,再统计这两个和的差。
输入两次ctrl+z,是因为在scanf("%d", &c)的时候,残留了一个回车字符在输入缓存里,在getchar的时候,第一次读到的是残留的回车字符,第二次才读到ctrl+z。
改了一下你的代码,你看看。
#include <stdio.h>
int main()
{
int a,sum1,sum2,c;
c=sum1=sum2=0;
while( getchar()!=EOF) /*每次输入数字前,输入一个字符,判断是否是EOF,这个字符不需要保存入变量c */
{
printf("input");
scanf("%d",&c);
fflush(stdin); /*读取c后,清空输入缓存*/
if(c%2==0)
sum1=sum1+c;
else
sum2=sum2+c;
}
printf("he:%d\nhe1:%d\ncha:%d\n",sum1,sum2,sum1-sum2); /*这里少一个输出参数*/
return (0);
}
更多追问追答
追问
对对 就是这个意思 这个除了清空缓存 其他就没有办法了么 比如换一下顺序怎么样的… 我才入门😂
真是先要向您说声谢谢先
2015-06-08
展开全部
你把问题发到师父啦网站shifu.la我让我朋友现在帮你看一下,他是那个网站的程序员
更多追问追答
追问
我们学校断网了 现在怕是传不了了 真是太感谢您了 这个网我明天一定会去看看 谢谢了
追答
没能帮上忙,不客气
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询