一剑飘零 发表于 2022-5-24 01:17

这么简单的问题,我居然搞不懂了,想撞墙。

本帖最后由 一剑飘零 于 2022-5-24 01:20 编辑

救命啊,1点多了还不想睡。感觉超级简单的问题。居然卡壳了。调试ab==0,一直都是0,a是1,a我还没输入就是1。这。。。
#include <stdio.h>
int main() {   //日了狗了,越是简单的,怎么越是错误。
      int a,ab;
      printf("请输入:");
      ab = scanf("%d", &a);
      while (ab != 1) {            //如果我输入一个非int型,一直循环,根本不让我再输入的机会,一直打印请重新输入:。
                printf("请重新输入:");   
                ab = scanf("%d", &a);
      }
      return 0;
}

zxl1227 发表于 2022-5-24 01:48

加一个数据类型if条件判断喽

云在天 发表于 2022-5-24 02:00

和类型没关系,其实这是一个比较常见的错误

在你输入不符合指定数据类型的数据时,会强制转化成指定类型,这就导致了你缓冲区一直有数据存在,然后scanf会继续读取缓冲区的数据,从而循环

解决方法

清除缓冲区
setbuf(stdin, NULL)

马了顶大 发表于 2022-5-24 07:46

前面加个输入数据类型判断

一剑飘零 发表于 2022-5-24 08:21

本帖最后由 一剑飘零 于 2022-5-24 08:24 编辑

zxl1227 发表于 2022-5-24 01:48
加一个数据类型if条件判断喽
意思是在后面加一个if((int)ab==1) break?
这样吗? 如果是这样是没用的,我实际都改了几次了。我再试版主的,应该是对的。

一剑飘零 发表于 2022-5-24 08:23

云在天 发表于 2022-5-24 02:00
和类型没关系,其实这是一个比较常见的错误

在你输入不符合指定数据类型的数据时,会强制转化成指定类型 ...

好的,谢谢,我试试。

qqxiazhitmac 发表于 2022-5-24 08:24

别着急慢慢来

hqm2019 发表于 2022-5-24 08:53

支持你撞墙

LiuDaVv 发表于 2022-5-24 09:22

{:1_925:}不至于不至于

cghost 发表于 2022-5-24 09:41

难道循环之后不应该加个break跳出循环么……或者是给个重新输入的机会啊……
页: [1] 2
查看完整版本: 这么简单的问题,我居然搞不懂了,想撞墙。