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

关于c - 如何处理标准输入错误状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13812150/

10-12 16:07
查看更多