我是c语言初学者我想问问我这个程序怎么出错了?

#include <stdio.h>
int main()
{
int i,j,sum;
char ch;
printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
while(1)
{
sum = i + j;
printf("和是:%d",sum);
printf("是否继续?Y/N\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{
printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
}
else
{
printf("谢谢使用!");
break;
}
}
}

请问这里的scanf有什么问题吗?还是我的程序写的错了,错在哪里呢?谢谢

#include <stdio.h>
int main(){
int i,j,sum;
char ch;
printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
while(1){
sum = i + j;
printf("和是:%d",sum);
printf("是否继续?Y/N\n");
fflush(stdin); //清空之前的输入流,不然还会遗留一个'\n',影响下次输入。
scanf("%c",&ch);
if(ch=='y'||ch=='Y'){
printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
}else{
printf("谢谢使用!");
break;
}
}
}
我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-18
第1个问题就是scanf的格式问题,中间用个空格或者逗号。
第2个问题,sum使用的时候没有初始化!在while循环之前将sum = 0;
这样才会产生正确的结果。
第2个回答  2013-03-18
有一个问题,你的scanf里的%d%d中间没有一个间隔符号,来判断两个数的分割,建议你改成
scanf("%d,%d",&i,&j);然后在输入的时候先输入一个数,然后输入逗号,再输入第二个数追问

我试了可是,不是算不出来是

追答

在scanf("%c",&ch);前加上getchar();
因为你输入了两个数字后还按了一下回车,这个回车也是字符,也就是"\n"
所以下一个scanf其实没有读到你的y或者n,而是把"\n"给读了进去,所以判断是结束程序
用上了getchar();就可以先读取一个字符,也就是把"\n"给读了,这样就不会影响你的输入
当然如果你把getchar();换成fflush(stdin);也可以,这是把之前的数据流清空,同样可以把"\n"也就是回车的影响消除。

第3个回答  2013-03-18
嗯,,,程序看完,

你水平比我好点,我没看出问题点在哪里
第4个回答  2013-03-18
#include <stdio.h>
int main()
{int i,j,sum;
char ch;
printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
while(1){sum = i + j;
printf("和是:%d",sum);
printf("是否继续?Y/N\n");
getchar();
scanf("%c",&ch);
if(ch=='y'||ch=='Y'){printf("请输入两个数:\n");
scanf("%d%d",&i,&j);
}else
{printf("谢谢使用!");
break;
}
}
}
第5个回答  2013-03-18
把scanf()换成
getchar();
ch=getchar();追问

我试了getchar()是可以的,但是就是不知道为什么“ch”用scanf不能读呢?

追答

可以读啊,
那是因为你的上一次的输入的确认键还在缓存啊,再次读得时候就读得是确认键。
你也可以把ch=getchar();换成scanf("%c",&ch);

相似回答