3

みなさん、アドバイスありがとうございます。残念ながら、私はそのような機能を使用することを許可されていません。だから私はこのコードを書きました。これは1つの問題でうまく機能します。私が入ると、「hhjk」と言いましょう。最初の 'h' が非数字として検出された後にバッファをクリアしたい.. 関数 fflush について聞いたが、理解できない..

int get_int() 
{
    char inp; /*inp, for input*/
    int number; /*the same input but as integer*/
    int flag=0; /*indicates if i need to ask for new input*/

    do  {
        flag=0; /*indicates if i need to ask for new input*/


        scanf("%c",&inp);

        if (inp<48 || inp>57 ) /*this means it is not a number*/
        {
            inp=getchar(); /*Here i clear the buffer, the stdin for new input*/
            printf("Try again...\n");
            flag=1;
        }
        else
          if (inp>53 && inp<58 && flag!=1) /*this means it is a number but not in the 0-5 range*/
          {
              inp=getchar(); /*here i clear the buffer, the stdin so i can get a new input*/
              flag=1;
          }

        } while (flag);

    number=inp-48; /*takes the ascii value of char and make it an integer*/ 
    return number;
}
4

2 に答える 2

4

簡単な方法は、文字列を入力し、その中のすべてが文字であることを確認することです。変換を実行できない場合は 0 を返すためstrtol()、チェックに使用できます。唯一の条件は、0 を有効な入力にしたいため、チェックに特別な条件を設定する必要があることです。

int main()
{
    char input[50];  // We'll input as a character to get anything the user types
    long int i = 0;
    do{
        scanf("%s", input);  // Get input as a string
        i = strtol(input, NULL, 10);  // Convert to int
        if (i == 0 && input[0] != '0') { // if it's 0 either it was a numberic 0 or
            printf("Non-numeric\n");     // it was not a number
            i = -1;   // stop from breaking out of while()
        }
        else if(i<0 || i > 5)
            printf("wrong\n");
    }while (i < 0 || i >5);
    return 0;
}
于 2012-11-27T20:16:47.490 に答える
1

もう 1 つの方法は、ほとんど見られない %[] 形式を scanf ファミリに使用することです。以下のコードでは、%[0-9] があります。これにより、数値のみが得られます。(リターンコードなどは示していません)

do {
        if ((scanf("%[0-9]%c", input, &nl) == 2) && (nl == '\n')) {
                value = strtol(input, NULL, 0);
        } else {
                value = -1;
        }
} while ((0 <= value) && (value <= 5));
于 2012-11-27T20:49:48.820 に答える