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キャラクターをスキャンした後、通常の作業に戻りたいです。

4

1 に答える 1

2

scanfのmanページから:

これらの関数は、割り当てられた入力項目の数を返します。

したがって、戻り値を確認し、不正な値を読み込んで、エラーが発生した場合に破棄することができます。

#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;
}
于 2012-12-11T01:26:35.150 に答える