本来输入整型,但不小心输入英文后打印循环了?

本来输入整型,但不小心输入英文后打印循环了?

http://img1.sycdn.imooc.com//climg/5afad0420001873a10001334.jpg
http://img1.sycdn.imooc.com//climg/5afad04200010ddd10001334.jpg
老师好,这里是int型,输入不符合条件如图1,只打印一遍,返回重新输入,是正常的;但是假如不小心输入一个英文字符,就会一直打印……如何让输入小写英文,也只打印一遍输入错误呢?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

因为你要读取的是数字,输入一个字符时, scanf函数会失败,但是这个字符还在流里面没有被读出来,所以就死循环动不了了,加入getchar(),下面参考代码可以在输入字符的情况下不再循环:

  NSLog(@"请选择排数[1,7]:");
    int num;
    scanf("%d",&num);
    getchar();
    if (num < 1||num > 8 ) {
        NSLog(@"重输");
        [self selectRows];
    }else {
        selectRow = num;
        NSLog(@"你选择的排数是:%d",num);
        [self selectCol];
    }


没有马甲线的安琪拉 2018-05-15 20:59:25

输入错误之后,再加一个接收字符串的操作,试试看

  • 提问者 幕布斯2332854 #1
    怎么理解,没有看明白
    2018-05-16 14:15:48
  • imoocLovers 回复 提问者 幕布斯2332854 #2
    ①在代码中排数和座位号是整型,所以只有整型数据scanf才能获取到,否则程序会进入循环 ②如果你想获取控制台输入的字符,你可以通过下面代码的方法拿到: char str[50]; printf("输入字母:”);  scanf("%s",str);
    2018-05-16 15:31:04
  • 提问者 幕布斯2332854 回复 imoocLovers #3
    我意思是……设定的是整型,但用户不小心输入英文了循环怎么办,意思用户输入整型时,不小心输入了英文,可以不循环。
    2018-05-16 21:30:02
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师