まず、sscanf
の使用に関する他の質問は私の質問には答えません。よくある答えはsscanf
を使用せず、代わりにfgets
またはgetch
を使用します。これは私の場合は不可能です。sscanfを正しく安全に使用する方法
問題は私のC教授が私にプログラムでscanf
を使用したかったことです。それは要件です。 しかし、プログラムはまた、すべての誤った入力を処理しなければなりません。
プログラムは整数の配列を読み取る必要があります。アレイの整数 がどのフォーマットで供給されるかは重要ではありません。タスクを簡単にするために、プログラムは最初に配列のサイズを読み込み、次に整数を新しい行に読み込みます。
プログラムは、このような入力を扱う(そして適切にエラーを報告する)必要があります。
- 999999999999999 ... 9(数字整数より大きい)を
- 12A3(整数12としてこれを読んでいません)
- ... Z(ストリング)
- 11 AA 22 33 \ n個の入力アレイ より大きい1つのラインの全て(これは11の後にすべてを捨てることによって処理されるかもしれない)
- 入力
もっと誤ったケースがあるかもしれませんが、これらは私が考えることができる唯一のものです。誤入力が供給されている場合は
、プログラムは正しい入力が与えられるが、前回の正しい入力が保たれなければならない(唯一間違った 入力が入力ストリームからクリアする必要があります) まで再入力をユーザーに依頼する必要があります。
すべてがC99規格に準拠している必要があります。
技術的には、上記の要件を満たすことが条件です。 scanfは固定サイズの文字列に整形されており、それをチェックし、sscanfは(今度は確かに有効な)変換を行います。ちょっとばかげていますが、それは破損することなくscanfを使用するという要件を満たしています。 – davenpcj