前言

本文主要介绍C语言内置函数scanf在读入整形数据时,程序员或用户输入字符型数据程序将发生什么变化。本文基于猜数字游戏实现(点击链接可以查看游戏如何实现,但不读也可看懂本文)


在开发软件时,我们常会给用户提供一个菜单进行选择,如图所示。

具体实现代码如下:

int n = 0;//定义一个变量,do {printf("***********************\n");printf("***1:开始\\继续游戏****\n");printf("***0:退出游戏*********\n");printf("***********************\n");printf("请您进行选择:");scanf("%d", &n);switch (n){case 1:printf("开始游戏\n");break;case 0:printf("成功退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (n);

由代码可知,我们先初始化整形变量n为0;
如果用户正常输入1时,则在屏幕上打印开始游戏
如果输入1和0以外的其它数字时则会打印输入错误,请重新输入
直到输入为0时,才能退出循环并在屏幕上打印成功退出游戏

下图是正确输入时,程序反馈的结果:

上图只进行了整型数据的输入,若我们在此时输入一个字符型数据会发生什么呢?
如下图所示:

可见当我输入a之后,程序就不断的打印菜单以及开始游戏,进入了死循环。

发生这种情况的归于以下两个原因:
1.第一次我输入的数据为1,n此时的值由0改变为1。(输入什么不重要,仅以1为例,如果输入为0,则会直接打印退出游戏)
2.scanf(“%d”,&n) 只能读入整形数据,当我们输入字符类型的数据如a时,scanf(“%d”,&n) 不能读入,而导致字符数据a一直留在缓冲区中被scanf()函数一次又一次的读入,而n的值却一直为整型数据1不发生变化,从而进入打印的死循环。

n的值为1不发生改变,可点击F10进入调试后,点击窗口->监视->再任意选择一个窗口进入。

输入n再逐步调试就可以发现n的值的变化

总结

通过以上内容,我们对scanf函数有了进一步的了解,希望此文章对大家C语言的学习有所帮助。