c语言scanf判断输入是否为整数
🌼嘿嘿~(●ˇ∀ˇ●) 今天来讲讲怎么判断scanf输入的是否是一个整数
其实其他blog上有了一些方法,这次我来一个不一样的 建议一次性读完 ~🌈
☘️ 写一个程序,判断这个数是不是一个整数
🐬乍一看是不是很简单。可以采用读入的数减去它本身,判断是不是小于10-8这样一个数量级 那还有没有其他的办法捏?
🌿我突然想到一个,于是就记录一下~
scanf 读入的时候是有缓冲区的
你输入一个小数的时候会自动把小数点忽略,这个时候,它就读不到我输入的全部内容,也就是只读到整数部分,还有小数点以及后面的部分,全部还在缓存区里。
🤔这个时候!就不具备检错的功能了
🌴意思就是 你输入一个小数,它只会读取小数点之前的数 小数点之后的数都会给你放在缓冲区里~
举个🌰
#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,完结~(●’◡’●) 看到这里 点个赞叭 (●’◡’●)