1

たとえば、次のようにします。

printf("Continue?\n>>");
scanf("%d", &cont);
getchar();

通常は getchar() を追加して、プログラムが無限ループ (バッファーから '\n' 文字を読み取る) しないようにします。ただし、このステートメントに続くメニューで使用すると、余分な文字が読み込まれ、文字入力に続く (入力された文字数までの) すべての scanfs がスキップされます。

私が理解したいのは、int 以外のタイプの入力を読み取るときに、プログラムのいくつかのセクションをスキップしないようにする方法です。これは、変数が予想されるドメインに入るまで継続しないループ内に配置することで解決するのが最善でしょうか?

4

3 に答える 3

1

代わりにfgetsandを使用することを検討してください。sscanf1 行分の入力を読み込み、stdin 全体ではなくその行のみを解析します。

于 2011-03-11T20:12:34.393 に答える
0

によって返される値を確認しますscanf。戻り値は、割り当てられた変数の数を示します。が期待されていintて、ユーザーが文字を入力した場合は、scanfゼロを返す必要があります。

"%*s"入力指定子を含めてみてください。http://www.cplusplus.com/reference/clibrary/cstdio/scanf/を参照してください。

于 2011-03-11T20:19:32.487 に答える
0

整数を読み取る代わりに、文字列を読み取って数値に変換します (atoi)。発生する可能性のある 2 つの問題:

  1. 文字バッファが十分に大きくありません。これを防ぐには、入力から char ごとに読み取り、必要に応じてバッファーを再割り当てします。
  2. 文字列は数値ではありません。Atoi は何らかのデフォルト値 (0 または -1、覚えていない) を返します。どういうわけか文字列をチェックする必要があります。
于 2011-03-11T20:20:16.473 に答える