C语言中限定输入scanf的为整型(整数),浮点型

目录

scanf输入的一次小优化

这是一个常见的错误,那我们是否有办法能够绕过这个错误,给用户再输入一次呢?

下面是我这个小萌新对scanf的理解和调整的想法

对 while (scanf("%lf", &n) == 0 || getchar() != '\n')的解释

对 while (getchar() != '\n')的解释

对 函数int Judge(int n)的解释

对 t = Judge(t)的解释

接下来是对上面代码的扩展,如果我们可以限定用户输入为整型,是否也能调整为其他类型呢?

调整为浮点型


scanf输入的一次小优化

scanf的功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

scanf在接收到规定格式之外的字符时会引发一系列错误(如我写扫雷的时候)

如图:

这是一个常见的错误,那我们是否有办法能够绕过这个错误,给用户再输入一次呢?

如果我们只用scanf就无法解决用户输入其他字符的问题,为此我写了一个函数去解决此类问题.

代码如下:

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int Judge(int n)
{
	while (scanf("%d", &n) == 0 || getchar() != '\n')
	{
		printf("输入的字符不为整型,请重新输入:");
		while (getchar() != '\n');  // 清除缓存区
	}
	return n;
}

int main()
{
	int t = 0;
	t = Judge(t);
	printf("%d", t);
}

这里我运用了一个函数去实现.

输出结果:

这个结果就代表着我们成功限定了用户输入的数据类型

下面是我这个小萌新对scanf的理解和调整的想法

(借鉴了一下其他作者的内容,如有侵权请告知我!)

scanf的运作原理:
当要求的类型与输入的类型不符合时,scanf会选择直接跳过不接收该输入,不接收,也就是说缓存区中输入的东西既没被接收也没有被清除,就这么留在那里.但是用户下一次输入时,scanf缓存区有东西,系统就直接去读取了.

这虽然很不合理,但我们仍要想办法解决这个问题.

对 while (scanf("%lf", &n) == 0 || getchar() != '\n')的解释

若为 0 则说明第一个位置出现了字符
不为 0 则说明前面是整型,此时再取出一个字符
若为 \n 则说明缓存区清空,要是还有问题则又是非法字符

对 while (getchar() != '\n')的解释

清空缓存区,向缓存区读取数据,直到把所有数据读完,再跳出,防止无限循环

对 函数int Judge(int n)的解释

我们需要的是用户输入的为整型,故设置其返回值的类型为整型,Judge只是一个自定义的函数名,定义成其他的也可以

对 t = Judge(t)的解释

我们需要接收Judge的返回值,此时选择了用整型的变量t去接受返回值

接下来是对上面代码的扩展,如果我们可以限定用户输入为整型,是否也能调整为其他类型呢?

调整为浮点型

(头文件我就忽略了哈!!!)

double Judge(double n)
{
	while (scanf("%lf", &n) == 0 || getchar() != '\n')
	{
		printf("输入的字符不为浮点型,请重新输入:");
		while (getchar() != '\n');  // 清除缓存区
	}
	return n;
}

int main()
{
	double t = 0;
	t = Judge(t);
	printf("%.2f", t);
}

输出结果如下:

当然调整成浮点型也是能接收整型的!!!(C语言自带的隐式转换功能)

今天就先到这了!!!

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!

你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

走在努力路上的自己

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

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

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

打赏作者

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

抵扣说明:

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

余额充值