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

前言

本文主要介绍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语言的学习有所帮助。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若鱼不是鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值