3

整数ではなく文字列を入力すると、このコードに問題が発生します。ユーザーが整数ではなく文字を入力したかどうかを確認するにはどうすればよいですか? (文字ではなく数字を使うべきだというユーザーへのメッセージを出したい)

また、このコードで改善できる点があれば、助けてください! (私はCが初めてです)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main () {

    int secret, answer;

    srand((unsigned)time(NULL));

    secret = rand() % 10 + 1;

    do {
        printf ("Guess a number between 1 and 10");
        scanf ("%d",&answer);
        if (secret<answer) puts ("Guess a higher value");
        else if (secret>answer) puts ("Guess a lower value");
    } while (secret!=answer);

    puts ("Congratz!");
    return 0;
}
4

5 に答える 5

4

scanf は、見つかった一致の数を返します。あなたの場合、数値を読み取ると返されます10数値を読み取れない場合:

if(scanf ("%d",&answer) != 1){
    puts("Please input a number");

    // Now read in the rest of stdin and throw it away.
    char ch;
    while ((ch = getchar()) != '\n' && ch != EOF);

    // Skip to the next iteration of the do while loop
    continue;
}
于 2012-06-15T20:42:56.200 に答える
3

char[]入力を文字列 ( and )として読み取り、%sすべての文字が ( isdigit()) 数字であることを確認し (最初の文字として'+'orを許可する可能性があります)、 を使用して に変換します。'-'atoi()int

于 2012-06-15T20:41:18.063 に答える
0

ユーザーの入力が整数であると想定できないため、scanf()代わりに文字列を受け入れてください。strtol()次に、その文字列を;で変換してみてください。0入力が整数でない場合に返されます。

于 2012-06-15T20:42:29.767 に答える
0

で入力を文字列として読み取り、fgets使用strtolして入力をチェックします。 strtolとは逆に、atoiエラーチェックを行うことができます。

于 2012-06-15T20:42:48.533 に答える
0

文字列内のすべての文字が数字の場合にのみ true を返し、そうでない場合に false を返す関数を作成する必要があります。

char * in_str;
int answer;

...

sscanf("%s", in_str);

if (!is_number(in_str)) {
  printf("Please put in a number, not a letter");
} else {
  answer = atoi(in_str);
}

...

is_number機能を実装する必要があります

于 2012-06-15T20:39:21.670 に答える