c语言中定义了int a;输入时故意输入字母就会死循环 怎么解决?

inta,b;printf("enterthenumber:\n");scanf("%d",&a);程序运行时输入字母就跪了怎么样输入字母可以避免这样的情况... int a,b;
printf("enter the number:\n");
scanf("%d",&a);

程序运行时输入字母就跪了 怎么样输入字母可以避免这样的情况
展开
 我来答
风若远去何人留
2015-09-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20403 获赞数:450142
专业C/C++软件开发

向TA提问 私信TA
展开全部

在C语言中,要输入值到整型变量a中,需要使用

scanf("%d",&a);

如果是在循环中输入,那么一旦出错,就会导致后续均无法输入。

为避免这种情况,可以使用判断scanf的返回值来确定输入是否成功。

以下是循环输入整数,直到遇到-1退出的代码

while(1)
{
    scanf("%d",&a);
    if(a == -1) break;
    printf("%d",a);
}

在这个程序段执行时,如果输入了字母就会导致死循环。

可以修改为

while(1)
{
    if(scanf("%d",&a)!=1) 
    {
        getchar();
        continue;
    }
    if(a == -1) break;
    printf("%d",a);
}

其原理如下:

scanf 的返回值是实际输入成功变量的个数。当scanf输入一个int型并成功时,会返回1。而遇到了字符时,输入失败,实际输入的数量为0,返回的就是0,这时把缓冲中影响输入的字符用getchar读取,就清除了这个障碍,继续下次读取(continue)。

只有当输入整型正确,scanf返回1时,才会继续执行循环中的其它语句。

kaixingui2012
推荐于2018-03-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6828万
展开全部
在scanf("%d",&a);之前加一句fflush(stdin); 清缓存

如:
int a,b;
printf("enter the number:\n");
fflush(stdin);
scanf("%d",&a);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式