2

私が抱えている問題は、ユーザーがプログラム内に数字の代わりに文字を入れて、オプションで「無効になっています」というメッセージを出力する可能性を無効にしたいということです。同じ変数の値を要求する必要があります。私はこれを使ってこれをやろうとしました:

scanf(" %[0-9]d",&x);

この:

else
       result = scanf("%*s");

それでもうまくいきません。何を探すべきですか?インターネットを検索しましたが、使用されている C++ のソリューションしか見つかりcinませんでした。残念ながら、C ではまったく機能しません。

4

2 に答える 2

3

次のようなことを試すことができます:

char c[SIZE];
int i;    

// While the string is not a number
while(fgets(c, SIZE , stdin) && !isAllDigit(c));  

ここで、isAllDigit は次のとおりです。

int isAllDigit(char *c){
    int i;
    for(i = 0; c[i] != '\0' && c[i] != '\n'; i++) // Verify if each char is a digit
       if(!isdigit(c[i]))         // if it this char is not a digit
           return 0;              // return "false"

    return 1; // This means that the string is a number       
} 
于 2012-11-26T00:05:59.280 に答える
2

scanf は、キーボード入力にはまったく適していないため、あまり使用されなくなりました。最近の基本的なスキームは、fgets() + validate + sscanf() をループで実行することです。

于 2012-11-26T00:08:18.603 に答える