关于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;
上面函数输入非数字时为什么陷入死循环? 展开
上面函数输入非数字时为什么陷入死循环? 展开
8个回答
展开全部
问题就出现在这句:
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;
}
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;
}
展开全部
因为是逗号表达式,根据逗号表达式的定义,最终表达式的结果是最右边的那个值。
例如a=1,2,3,4,5;那么a就是5
x=(i=4,j=16,k=32)就相当于x=k=32。
例如a=1,2,3,4,5;那么a就是5
x=(i=4,j=16,k=32)就相当于x=k=32。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
do{ }while是个循环语句,while里是条件,当条件成立的时候才会继续执行,若不成立则跳出,若成立,则需要再次输入,若输入非数字,则可能是输入的是ascii码为1的字母
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为"scanf("%d",&C)"的意思是输入整形数字,格式控制符%d就是这个意思,只能输入整形数字,当想输入其他字符时,就要将%d换成%c就可以了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你前面定义:int c=1 则c只能接受整形的数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询