C言語でscanfの戻り値を無視したままにする

scanf関数の戻り値を無視すると、プログラムがクラッシュしたり期待通りの動作をしなくなったりする可能性があります。この問題を解決するには、以下の方法を検討してください。

  1. scanf関数の戻り値をチェックする:scanf関数呼び出し後、戻り値を確認することで入力が成功したかどうかを確認できます。戻り値が予測される入力数と異なる場合は、入力が失敗しています。変数を使用して戻り値を格納し、チェックを行うことができます。

説明:

int main() {
int num;
if (scanf("%d", &num) != 1) {
printf("输入错误\n");
// 其他错误处理逻辑
} else {
// 输入成功,继续后续操作
}
return 0;
}
  1. 入力バッファのクリア:ユーザーが想定外の入力をすると、scanf関数は無効な入力を入力バッファに残し、後続の入力操作に影響します。改行またはファイルの終わりに達するまで、入力バッファ内のすべての文字をクリアするためにループを使用できます。

サンプルコードです。

int main() {
int num;
int ret;
while ((ret = scanf("%d", &num)) != 1) {
if (ret == EOF) {
printf("读取结束\n");
break;
}
int c;
while ((c = getchar()) != '\n' && c != EOF) {
// 清除输入缓冲区中的字符
}
printf("输入错误,请重新输入\n");
}
// 输入成功,继续后续操作
return 0;
}
  1. scanf関数の代わりに、fgets関数を利用します。fgets関数は入力一行を読み取って、文字配列に格納します。文字列処理関数で入力を行解析し、必要なデータを取り出します。

例のコード

int main() {
char input[100];
int num;
while (fgets(input, sizeof(input), stdin) != NULL) {
if (sscanf(input, "%d", &num) != 1) {
printf("输入错误,请重新输入\n");
continue;
}
// 输入成功,继续后续操作
break;
}
return 0;
}

以上の方法を用いることで、scanf関数の戻り値が無視される問題を解決し、入力間違いを適切に処理できます。

bannerAds