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);
}
展开
 我来答
百度网友83cdc1c
2015-06-09 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:857万
展开全部

看你的代码的意思,是想输入几个数,分别统计偶数和奇数的和,再统计这两个和的差。

输入两次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我让我朋友现在帮你看一下,他是那个网站的程序员
更多追问追答
追问
我们学校断网了   现在怕是传不了了  真是太感谢您了   这个网我明天一定会去看看  谢谢了
追答
没能帮上忙,不客气
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式