Thorpe

导航

 

输入缓冲区,

 

因为每次scanf的读入都并非直接从用户的输入得来,而是由用户的输入至输入缓冲区,而后scanf再从输入缓冲区将其读出。

如果在某些情况清空输入缓冲区,将会导致数据堵塞,无法读入。例如:

1 int a;
2 printf("Please enter a number: ");
3 scanf("%d",&a);
4 printf("Please enter a number again: ");
5 sacnf("%d",&a);

如上方代码,如果用户老老实实输入两个数字还好,要是在第一个scanf输入一个char,比如'a',则输入缓冲区堵塞,程序会跳过,连带第二个scanf也无法读入。

所以需要加上这样一组代码:

1 int a;
2 printf("Please enter a number: ");
3 scanf("%d",&a);
4 
5 scanf("%*[^\n]");
6 scanf("%*c");
7 
8 printf("Please enter a number again: ");
9 sacnf("%d",&a);

中间新加的两句scanf就是起到清空输入缓冲区的作用,哪怕用户输入'a'也不会影响下一次的输入。

posted on 2015-07-27 18:36  Thorpe  阅读(122)  评论(0)    收藏  举报