关于c语言输出的问题。

#include<stdio.h>intmain(){intc=1;do{scanf("%d",&c);printf("%d",c);}while(c==1);retur... #include<stdio.h> int main() { int c=1; do{ scanf("%d",&c); printf("%d",c); }while(c==1); return 0;
上面函数输入非数字时为什么陷入死循环?
展开
 我来答
goode2008
2012-08-03 · TA获得超过471个赞
知道小有建树答主
回答量:175
采纳率:0%
帮助的人:210万
展开全部
问题就出现在这句:
scanf("%d",&c);

scanf函数遇到无法与格式控制说明相匹配的情况时,则函数终止。
但是,scanf默认是从标准输入stdin读入数据,但是stdin默认是行缓冲的,也就是你第一次输入的一个非数字值在scanf出错退出后不会丢掉,而是驻留在缓冲区中,同时c的值也没有改变,仍然是1。这样,第二次循环,scanf任然去读缓冲区中的值,任然读到你第一次输入的非数值值,任然出错退出,c值不改变,这样就出现了死循环。
对此的证明就是,在scanf("%d",&c);后面加入一句:
fflush(stdin);
强制冲洗stdin的缓冲区,就不会出现死循环了~
更改后程序如下:
#include<stdio.h>
int main()
{
int c = 1;
do{
scanf("%d",&c);
fflush(stdin);
printf("%d",c);
}while(c == 1);
return 0;
}
虎竹青海妆
2019-12-13 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:934万
展开全部
因为是逗号表达式,根据逗号表达式的定义,最终表达式的结果是最右边的那个值。
例如a=1,2,3,4,5;那么a就是5
x=(i=4,j=16,k=32)就相当于x=k=32。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
方雪time
2012-08-03
知道答主
回答量:14
采纳率:0%
帮助的人:1.7万
展开全部
do{ }while是个循环语句,while里是条件,当条件成立的时候才会继续执行,若不成立则跳出,若成立,则需要再次输入,若输入非数字,则可能是输入的是ascii码为1的字母
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_Mr_Computer_
2012-08-03 · TA获得超过1042个赞
知道小有建树答主
回答量:464
采纳率:100%
帮助的人:262万
展开全部
因为"scanf("%d",&C)"的意思是输入整形数字,格式控制符%d就是这个意思,只能输入整形数字,当想输入其他字符时,就要将%d换成%c就可以了...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ddb4a22
2012-08-03 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:105万
展开全部
你前面定义:int c=1 则c只能接受整形的数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式