ユーザーから整数を受け取り、この数値を加算演算で使用するプログラムがあります。
番号を受け入れるために使用しているコードは次のとおりです。
scanf("%d", &num);
ユーザーが小数点付きの文字または数字を入力した場合にエラーメッセージが画面に表示されるように、入力を検証するにはどうすればよいですか?
ユーザーから整数を受け取り、この数値を加算演算で使用するプログラムがあります。
番号を受け入れるために使用しているコードは次のとおりです。
scanf("%d", &num);
ユーザーが小数点付きの文字または数字を入力した場合にエラーメッセージが画面に表示されるように、入力を検証するにはどうすればよいですか?
scanf
戻り値を使用する必要があります。差出人man scanf
:
戻り値
これらの関数は、正常に一致および割り当てられた入力項目の数を返します。これは、提供された数より少ない場合もあれば、早期の一致が失敗した場合はゼロになる場合もあります。
したがって、次のようになります。
if (scanf("%d", &num) != 1)
{
/* Display error message. */
}
「小数点付きの数値」では機能しないことに注意してください。このためには、たとえば構文解析を使用する必要がありstrtol
ます。もう少し複雑かもしれません。
変換指定子またはを使用scanf
して入力をテキストとして読み取り、ライブラリ関数を使用して変換を実行します。%s
fgets
strtol
#define MAX_DIGITS 20 // maximum number of decimal digits in a 64-bit integer
int val;
int okay = 0;
do
{
char input[MAX_DIGITS+2]; // +1 for sign, +1 for 0 terminator
printf("Gimme a number: ");
fflush(stdout);
if (fgets(input, sizeof input, stdin))
{
char *chk = NULL; // points to the first character *not* converted by strtol
val = (int) strtol(input, &chk, 10);
if (isspace(*chk) || *chk == 0)
{
// input was a valid integer string, we're done
okay = 1;
}
else
{
printf("\"%s\" is not a valid integer string, try again.\n", input);
}
}
} while (!okay);