scanf()函数的使用

假如程序中需要在屏幕上输入一个整型,scanf()函数,如下:scanf(“%d",&a);如果此时输入的是一个char型,结果会如何?

下面说一下scanf()的使用规则:

1、如果使用了字段宽度读取输入,那么scanf()在字段结尾或者在第一个空白字符处终止。如果第一个空白字符不是数字,比如使用%d读取整数,而输入A,则scanf()会停在那里,并把A放回输入,并没有把任何值赋给指定的变量,程序下一次读取输入时,它就在A处重新开始,如果程序中只有%d说明符,scanf()永远也不会越过那个A,而且,如果使用带有多个说明符的scanf()语句,函数会在第一个出错的地方停止读取输入。其他数字说明符读取输入与使用%d的情况相同。

2、scanf()的返回值:返回成功读取的项目的个数。如果没有读取任何项目,返回0.当它检测到文件结尾,返回EOF(EOF在头文件stdio.h中定义的特殊值,一般#define把EOF定义为-1.

3、除了%c以外的说明符会自动跳过输入项之前的空格。如果在格式字符串中%c之前有一个空格,那么scanf()将会跳到第一个非空白字符处。即,scanf(“%c”,&ch):读取在输入中遇到的第一个字符。而scanf(“ %c”,&ch):读取遇到的第一个非空白字符。

如何使用scanf()解决读入类型不一致的问题问题:

1)fgets(buf,sizeof(buf),stdin);将输入流stdin中的字符全部读取字符数组buf中,小于buf大小。

sscanf(buf,”%d”,&hoge);可避免输入流输入多余的字符影响后面流的输入与输出。读取buf

        2)fflush(stdin):是对输出流使用的,他不能用于输入流标准中并没有定义用于输入流的fflush()

        3)while(scanf(“%d”,&hoge)!= 1)

                    printf(“输入错误,请再次输入!”);会导致程序无限循环下去。

示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int input;
	char ch;
	while(scanf("%d",&input) != 1)
	{
		while((ch = getchar()) != '\n')
		putchar(ch);
		printf(" is not an integer.\nPlease enter an");
		printf(" integer value, such an 23, -23, or 3:");
	}
	system("pause");
	return 0;
}
如果输入的第一个非int型字符,则字符保留在输入流中,然后由第二个while循环依次打印出输入字符到屏幕上。以上代码解决了scanf()输入类型不符的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值