5

私はしようとしています: - ユーザーが無効な値を入力した場合に値を再読み込みします。しかし、問題はscanf()1 回だけ実行され、2 回目以降は実行されず、プログラムが無限ループに陥ってしまうことです。

#include<stdio.h>
#include<math.h>
main()
{
    unsigned int a;
    unsigned int b = pow(2,M-1);
    unsigned int c;
    int x;

    printf("b = %i",b);

    input:
    fflush(stdin);
    fflush(stdout);
    printf("\nEnter any integer: ");
    x = scanf("%u",&a);

    printf("%u",a);
    if(x==0) 
        goto input;

    printf("\na = %i",a);

    c = a & b;

    printf("\nc = %i",c);

    if(c)
        printf("\nthe bit %i is set",M);
    else
        printf("\nthe bit %i is not set",M);
}

以前にスペースを追加してみましたが、試して%uみましfflush(stdin)たが、何も機能しませんでした。

編集: goto の使用が推奨されていないことはわかっていますが、この方法で行う必要があります。(ループの使用はオプションではありません)。M は、コンパイル時に gcc コマンド ラインを使用して定義するマクロです。

4

2 に答える 2

1

これは、無限ループを回避するための回避策です。goto の代わりに do while ループを使用してください:

do {
     printf("\nEnter any integer: ");
     x = scanf("%u",&a);

     printf("%u",a);
     if( x == 0)
     {
          char c;
          printf("hit any key \n");
          c = getchar();
     }

   } while(x==0);
于 2013-07-24T07:27:32.273 に答える