输入输入—scanf
scanf
返回值:
scanf("%d %d",&a,&b);
scanf返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF(-1)。
scanf读取输入缓冲区的数据:
未清空缓冲区如下
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 loop: 7 if( scanf("%d", n) == 0 ) 8 { 9 printf("input error"); 10 // getchar(); 11 goto loop; 12 } 13 return 0; 14 }
如果输入字符w这段程序将会无线循环输出“input error”,解释着个现象之前必须先解释scanf的工作原理。首先用户在键盘输入w然后回车,字符w进入输入缓冲区。然后scanf函数到输入缓冲区寻找整型量,但是w是字符型,所以scanf返回返回值0。这时程序跳到loop处继续执行,但是这时输入缓冲区中的w没有被拿走所以陷入死循环。
解决办法是取消代码中第十行的注释,getchar函数会拿走缓冲区中的字符w。