2012-12-11 58 views
1
#define MAGIC_NUMBER //place your favourite integer here 
#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    int input,i; 
    for(int i=0;i<100;i++) 
    { 
     scanf("%d",&input); 
     if(input== MAGIC_NUMBER) 
      printf("%d ",input);     
     else 
      printf("Invalid value\n"); 
    } 
    system("pause"); 
    return 0; 
} 

当输入非整数值时,此程序崩溃。在角色扫描后,我想让scanf恢复正常工作。如何处理stdin错误状态?

回答

2

scanf man-page

These functions return the number of input items assigned.

所以,你可以检查返回值,并读入不良值丢弃,如果有一个错误:

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    int input,i; 

    for(i=0;i<100;i++) 
    { 
     if (scanf("%d",&input) == 1) { // check if success 

     if(input== MAGIC_NUMBER) 
     { 
      printf("%d ",input);  
     } 
     else 
      printf("Invalid value\n"); 
     } else { // discard input 
     int c; 
     while ((c = getchar()) != '\n' && c != EOF); 
     } 

    } 

    return 0; 
}