scanf函数返回值
include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c; printf("请输入三个整数:");
int x=scanf("%d%d%d",&a,&b,&c);
printf("d%\n%d\n",a,x);}
请输入三个整数:1 2 3
输出1,3
请输入三个整数:5 6 d
输出5,2
可见scanf函数的返回值与正确接收到的值有关,
还有当发生错误时,返回eof,其值往往为-1
scanf函数因输入方式的因素会发生一项常见的错误,例如下
do
{
scanf(”%d”,&n);
}while(n<1);
这时候如果输入一个字符,那么该循环会一直持续下去(在VC++6.0debug版下),原因是输入一个字符与所要求的整型不相匹配,读取的时候在输入流里面遇到除空格,回车,tab外其他字符都会视做该数据的结束,然后n并没有初始化,其值在上VC版本中会一直是-858993460,为什么会一直是这个值,按理来说应该是一个随机的值,原因在于在debug版本下,原本该版本就是为了方便调试,假如因为未初始化的值是随机性的,程序一下调试成功,一下调试失败,就很难发现错误。
修改方法如下
do
{
scanf(”%d”,&n);
getchar()
}while(n<1);
加如getchar()的目的在于把那个字符给读取并消耗掉。因为getchar()也是在流上面读取数据。