C语言中常用的输入可以有多种方式,如scanf(),getchar(),gets()。它们的功能都类似(获取键盘输入的数据),但scanf()因功能使用、函数简单,而深受编程者喜爱。
scanf()函数功能: 执行格式化输入(用户可以按照指定格式输入数据)
scanf()函数原型: int scanf(char *format[,argument,...]);
scanf()从标准输入设备(通常指键盘) 读取输入的信息,并将读入任何固有类型的数据自动变换成适当的机内格式。其格式为: scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF。例如以下程序
int mian(void)
{
int a;
scanf(“%d”,&a);
return 0;
}
当程序运行到scanf(“%d”,&a)时会阻塞,等待键盘输入。如果我们在键盘上按下“5”、“7”然后回车了,那么“5”、“7”、回车键“\n”都被逐一放入缓冲区里,又由于回车键是特殊的字符(可实现清除行缓冲),它先将字符'\n'添加到缓冲区,随后便清除缓冲区 ,将其中的所有字符发送到一个叫做输入列表的地方 ,scanf函数以及其他标准输入函数便会立刻从输入列表中获取内容。
上述程序按照%d的规则从输入列表中获取字符 ,它获取了'5'、'7',并且将其转变为整数57,存入了变量a中。
如果我们将程序改为以下形式,
int mian(void)
{
char a[10];
scanf(“%s”,a);
return 0;
}
如果我们还是在键盘上按下“5”、“7”然后回车了,那么“5”、“7”、回车键“\n”还是一样被逐一放入缓冲区里;又由于回车键是特殊的字符(可实现清除行缓冲),它先将字符'\n'添加到缓冲区,随后便清除缓冲区 ,将其中的所有字符发送到一个叫做输入列表的地方 ,scanf函数以及其他标准输入函数便会立刻从输入列表中获取内容。
程序按照%s的规则从输入列表中获取字符 ,它获取了'5'、'7',并且将其转变为字符串“57”,存入了变量a中。
总之,我们输入的数据及缓冲中的数据都是一致的,只不过scanf函数根据不同的格式进行了不同的转换而已(省去了程序员自己转换数据的麻烦)。