//例1.c
#include<stdio.h>
int main(){
int num=0;
scanf(&num);
return 0;
}
//运行,输入的是3.2,3.2不是整型,因此是处理不了的
例2.c
#include<stdio.h>
int main(){
int num=0;
scanf(“%d”,&num);//使用占位符,我们知道占位符跟数据类型是配对的,我们用%d做占位符,要求计算机使用不带小数点的数字,然后把这个数字放在存储区里面
printf(“num是%d\n”,num);
//我们把结果输出验证一下
return 0;
}
运行结果:
4.7//输入4.7
num是4
例3.c
#include<stdio.h>
int main(){
int num=0;
printf(“请输入一个整数”);
scanf(“a%dc”,&num);//这样写,必须写a数字c,才能把内容读到输入缓冲区里面去
printf(“num是%d\n”,num);
//我们把结果输出验证一下
return 0;
}
结果:
请输入一个整数:a45c
num45
例4.c
#include<stdio.h>
int main(){
int num=0,num1=0;
printf(“请输入两个整数”);
scanf(“%d%d”,&num,&num1);//Scanf()获取数据,数据与数据之间,用空格隔开的,然后回车,这样就进入键盘缓冲区,然后进入键盘缓冲区。
printf(“num是%d\n”,num);
printf(“num1是%d\n”,num1);
//我们把结果输出验证一下
return 0;
}
结果:
请输入两个整数:a//如果我们用scanf获得多个数据的话,如果用户输入的时候,我们本来想输入整数,但是他输入字母a,就表示输入错误了,会导致第一次获取失败,也会导致后面的获取也会失败了
获取失败了
num是0
num1是0
为什么会这样呢?
我们用户用键盘输入数据,首先会进入键盘里面的一个区域,这个区域叫做缓冲区,这个区域可以用来放数字,会把键盘输入的数字依次填充到缓冲区里面去
还有一个区域就是输入缓冲区,表键盘缓冲区的数字,按顺序填进输入缓冲区里面去,我们真正获取的数据是从输入缓冲区里面的
如果输入a,a就会最后流到输入缓冲区里面去,我们用scanf函数抽出来了,发现不对,把a扔回输入缓冲区里面去,然后第二次获取的时候,再取出来,发现还是a,又把a放回去了,然后又一次获取失败了,因此只要是a堵住,程序一定会永远获取失败。我们应该怎么解决这个问题呢?
例5.c
#include<stdio.h>
int main(){
int num=0;
printf(“请输入一个个整数”);
scanf(“%d,&num);
printf(“num是%d\n”,num);
scanf(“%*[^\n]”);
scanf(“%*c”);//这两句是为了清空缓冲区
printf(“请输入一个个整数”);
scanf(“%d,&num);
printf(“num是%d\n”,num);
return 0;
}
5个例子搞懂scanf()
最新推荐文章于 2024-08-18 22:08:24 发布