scanf
返回值:
scanf("%d %d",&a,&b);
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。
原文:https://www.cnblogs.com/huochemeiyouhuo/p/11096114.html