c语言学习----scanf判断输入是否为整数(关于缓冲区 关于getchar())

c语言scanf判断输入是否为整数

🌼嘿嘿~(●ˇ∀ˇ●) 今天来讲讲怎么判断scanf输入的是否是一个整数
其实其他blog上有了一些方法,这次我来一个不一样的 建议一次性读完 ~🌈

☘️ 写一个程序,判断这个数是不是一个整数

🐬乍一看是不是很简单。可以采用读入的数减去它本身,判断是不是小于10-8这样一个数量级 那还有没有其他的办法捏?
🌿我突然想到一个,于是就记录一下~

scanf 读入的时候是有缓冲区的

关于缓冲区 大家可以看看这个blog 我觉得写得不错~ 关于缓冲区
也可以看看我写的这个
blog1

你输入一个小数的时候会自动把小数点忽略,这个时候,它就读不到我输入的全部内容,也就是只读到整数部分,还有小数点以及后面的部分,全部还在缓存区里。

🤔这个时候!就不具备检错的功能了
🌴意思就是 你输入一个小数,它只会读取小数点之前的数 小数点之后的数都会给你放在缓冲区里~

举个🌰

#include<stdio.h>
int main(void){
    int x;
    printf("please enter: ");
    scanf("%d",&x);
    printf("x is %d\n",x);
    printf("x is %.2f\n",(float)x);
    return 0; 
}

先想象一下,输入1.22 最后得出来的是什么?


结果~
结果
🌞这个也是跟我说的一样 scanf 遇到小数点就停止读入了,除非你再来一个读入的,这个时候,缓冲区里的东西会自动读入进去~

比如:还是原来的代码 我稍微改一下

#include<stdio.h>
int main(void){
    int x,y;
    printf("please enter x: ");
    scanf("%d",&x);
    printf("please enter y: ");
    scanf("%d",&y);
    printf("x is %d y is %d\n",x,y);
    printf("x is %.2f y is %.2f\n",(float)x,(float)y);
    return 0; 
}

🤔输入2.211 猜猜会得到什么
结果:


结果
当你输入了2.211的时候,首先第一个scanf读入,到小数点停止,x=2
接着,缓冲区里有东西,第二个scanf不等你输入,直接从缓冲区里读

scanf会检查缓冲区是否为空,如果不为空则会从缓冲区直接读取数据进行匹配;否则则会挂起等待数据缓存;而如果这时,你想清空缓冲区可以用一个函数 fflush(stdin) 这样就可以把缓冲区清空,继续读入啦~~~


所以问题来了,回到我们的标题,如何判断scanf它输入的是整数?(这里的整数是不带小数点的哈)
~🐬很简单
判断一下它的缓冲区里除了我们输入的回车外 还有没有其他的值
🍊(因为我们输入完一个整数 会按下回车 使程序继续 表示我已经输入完毕了 但是输入的回车也是有效字符 也会输入到缓冲区 只是我的scanf不读入而已~)
那谁读入呢?
🌈 getchar()!!
它可以无条件读入任何一个从键盘上输入的东西!

我们可以判断一下输入了之后 我的缓冲区是不是"\n"就可以判断是不是整数了!!

🐳 再举个🌰理解一下哈~

#include<stdio.h>
int main(void){
    int x;
    char c;
    printf("please enter x: ");
    scanf("%d",&x);
    c=getchar();
    printf("x is %d   c is %c \n",x,c);
    
    return 0; 
}

这个时候你输入2.3 猜猜输出是什么?


结果
这个时候,缓冲区里是.3 一个getchar() 可以读入一个字符~
那么,如果是整数的话,getchar() 就必须得是回车!
🚩所以!

#include<stdio.h>
int main(void){
    int x;
    char c;
    printf("please enter x: ");
    scanf("%d",&x);
    c=getchar();
    if(c=='\n') printf("x is an integer\n");
    else printf("x is not an integer\n");
    
    printf("x is %d   c is %c \n",x,c);
    
    return 0; 
}

试试?输入3.2 和3 试试?


🍎当我输入3.2的时候
在这里插入图片描述
🍒当我输入3的时候
在这里插入图片描述
会多出一行 回车换行 也就是‘\n’ 这也就说明,我们只输入了整数 而不是小数或者其他什么数字

🍐输入a的时候
在这里插入图片描述

🌈ok,以上就是我学习c语言关于判断他输入的是不是整数的问题的一些想法,当然也许有更妙的方法!!

🐋欢迎大家讨论哦~

🌈ok,完结~(●’◡’●) 看到这里 点个赞叭 (●’◡’●)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

~光~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值