如何处理stdin错误状态?

时间:2012-12-11 01:19:11

标签: c scanf

#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恢复正常工作。

1 个答案:

答案 0 :(得分:2)

来自scanf man-page

  

这些函数返回分配的输入项目数。

因此,如果出现错误,您可以检查返回值和读入错误值以丢弃:

#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;
}