scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)

前言

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


在开发软件时,我们常会给用户提供一个菜单进行选择,如图所示。
scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第1张图片
具体实现代码如下:

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时,才能退出循环并在屏幕上打印成功退出游戏

下图是正确输入时,程序反馈的结果:
scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第2张图片
上图只进行了整型数据的输入,若我们在此时输入一个字符型数据会发生什么呢?
如下图所示:
scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第3张图片
可见当我输入a之后,程序就不断的打印菜单以及开始游戏,进入了死循环。

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

n的值为1不发生改变,可点击F10进入调试后,点击窗口->监视->再任意选择一个窗口进入。
scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第4张图片
输入n再逐步调试就可以发现n的值的变化scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第5张图片scanf函数读入整型数据时,输入字符型数据程序会发生什么变化(C语言)_第6张图片

总结

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

你可能感兴趣的:(C语言,c语言,程序人生)