a の宣言は、 から までの 20 文字の配列を指定a[0]
しa[19]
ます。a[20]
は範囲外です: a[20]=getchar();
。
getchar
戻りますint
。EOF
これは、文字以外の値を有効な文字値と区別するために行われます。正の戻り値は文字です。負の値はすべてエラーです...しかし、エラーを処理するために、戻り値をに格納し、int
負の値の int をチェックする必要があります!
int c = getchar();
if (c < 0) {
fputs("Read error while reading from stdin", stderr);
return EXIT_FAILURE;
}
a[19] = c; /* Don't rely on this being a string, since a string is a sequence of
* characters ending at the first '\0' and this doesn't have a '\0'.
* Hence, it isn't a string. Don't pass it to any str* functions! */
同様に、おそらく scanf からのエラーを処理する必要があります。
switch (scanf("%d", &b)) {
case 1: /* excellent! 1 means that one variable was successfully assigned a value. */
break;
case 0: fputs("Unexpected input while reading from stdin; "
"The \"%d\" format specifier corresponds to decimal digits.", stderr);
return EXIT_FAILURE;
default: fputs("Read error while reading from stdin", stderr);
return EXIT_FAILURE;
}
if (a=="ilangeeran")
ナンセンスです。あなたはどの本を読んでいますか。