使用scanf时,检测输入字符是否正确 您所在的位置:网站首页 判断错误的函数 使用scanf时,检测输入字符是否正确

使用scanf时,检测输入字符是否正确

2024-06-18 16:53| 来源: 网络整理| 查看: 265

PS:旧博文,发表于2017年8月21号,没想到我当年还没上大学就开始看c了。

这几天趁着放假期间,比较闲,准备学一门编程语言,因为开学要考C,就打算先学下C,然后直接入python。(虽然我两个都学过一点语法,一直没有深入)

╮(~▽~)╭

 

但在学习C的过程中也带来了一些启发(虽然我才学了几章(?ω?) )

其中格式各类的数据类型真是百花齐放。

而在学习scanf函数时候我遇到了一个问题

初学的时候写法如下

#include int number; int main() { scanf("%d",&number); printf("%d.\n",number); }

输入数字后输出一个数字

当然像我这样比较调皮的人就会用一些奇奇怪怪的东西

比如我会输入a,而不是输入一个数字

这样就会导致一个错误,程序无法显示正确的结果。

为了解决这个问题,我上网找资料。

虽然没找到现成的,但是还是找了到思路,可惜自己想出来后却找到了相关的。

 

我们知道scanf是有返回值的(在C primer plus的前几章有粗略的提到过),我的想法是结合while函数一起使用。

具体代码如下

#include int number; int main () { while( scanf("%d",&number) ?!= 1) { printf("enter a int number.\n"); } printf("%d\n",number); }

这样的话,如果输入不符合类型的字符scanf的返回值必然不为1,从而跳进一个while循环。

我们进行测试,分别输入1和q

z:~/work$./a.out 1 1. z:~/work$./a.out q enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number. enter a int number.

我们发现数字可以正确的输出,而输入q发现一直在循环输出enter a int number.。

看原代码可以知道,程序调到

while( scanf("%d",&number) != 1) { printf("enter a int number.\n"); }

这个循环体中,然后出不来了。

但是为什么会这样呢?

 

明明是我先~~啊走错片场了。

 

其实原因还是出现在scanf这个上,我们知道scanf是使用空白(换行符,空格,制标符)把输入分成多段.

使用scanf("%d",&number);为例

scanf在输入时会检测是否是数字,如果是则保存这个数字并读取下个字符。如果scanf读到了非数字,这认为输入结束,然后把非数字放回。这意味下一次读取时,,首先读取到的是这一个非数字,而不是用户的输入。

解决办法也很简单使用getchar()拿走字符就好。

代码如下

#include int number; int main () { while( scanf("%d",&number) != 1) { while(getchar()!='\n') { printf("enter a int number.\n"); } } printf("%d.\n",number); }

while(getchar()!=’\n’)的意思是释放一个字符,直到’\n’。

使用while循环有一个好处就是,如果用户输入了多个字符,getchar都可以一一拿走。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有