scanf函数问题

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可是在使用的时候,还是会遇到很多意想不到的问题,汇总见到的2种情况。

1. 读取多余的字符

例:

#include <stdio.h>
int main()
{
	char a;
	while(1)
	{
		printf("Hello,World!\n");
		scanf("%c",&a);
		printf("getchar: %d\n", (int)a);
	}
	return 0;
}

运行结果:

    

 

原因:键盘输入的信息首先保存在数据缓冲区,scanf是从缓冲区中读取键盘输入的信息然后到内存,所以,当输入abcd后回车,然后连续会输出5个字符。当输入a是连续输出2个字符。

解决办法:

方法(1)就是在scanf("%c",a);后加一句getchar(); 

方法(2)在scanf("%c",a);后加一句fflush(stdin);清除缓冲区。

2. 空白符问题

例:

#include<stdio.h>
main()
{   
	int a;
	printf("input the data\n");
	scanf("%d ",&a);
	printf("%d",a);
	return 0;
}

例子是scanf("%d  ",&a);%d后有空格,所以再输入的时候,输入一个数字后再输入无论多少个空格和回车键都没有结果,这时需要再输入一个字符,回车才能输出结果。这是因为用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。这里的空白符包括空格,制表符,换行符,回车符和换页符。

解决方法:输入的时候要注意。

暂时只有这两种情况了,






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值