質問: clock(); printf("%d回中%d回で成功しました。\n",MAX_STAGE,success); printf("%.1f秒でした。\n",(double)(end - start) / CLOCKS_PER_SEC); return 0; } ```
回答: ``` printf("\r数値を入力して下さい。\n"); fflush(stdout); - scanf("%d", &num); - scanf("%*[^\n]"); - snprintf(str2, sizeof(str2), "%d", num); + scanf("%9s", str2); if( strcmp(str1,str2) == 0) { ``` 何をしているか分かりますか? **追記** scanf("%s", str2); なら分かるんですよね。 それでも構いませんが、char str2[10]; の場合、 文字列の終端の '\0' を除いて 9文字しか格納できません。 ユーザが間違って 10文字以上入力すると配列の範囲外に 格納しようとして他の大切なデータを破壊したりします。 これをバッファ―オーバーランと言います。 こういった問題を防ぐために scanf の書式には、 入力文字数制限を書くことができます。 それが "%9s" です。 また元のコードが正しくないのは分かっているのでしょうか? scanf("%d", &num); では、入力が 12 でも 012 でも 0012 でも num の値が 12 になります。 ということは入力の区別ができなくなったということです。 入力が正し場合、scanf("%*[^\n]"); は不要です。 不正な入力を再入力させたいなら、次のように書きます。 ``` do { printf("\r数値を入力して下さい。\n"); fflush(stdout); if (scanf("%d", &num) == 1) break; // 入力エラーなし scanf("%*[^\n]"); // 行末まで不正文字を削除 } ```