5个例子搞懂scanf()

//例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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值