0

コマンドラインから非負数またはマイナス記号のいずれかを読み取ろうとしていますが、入力がそれらのいずれでもない場合、プログラムは終了するため、次のようにしました。

while((scanf("%d", &n)==1 && n>-1 && (input=1)) || (scanf("%c", &delete)==1 && delete=='-' && (input=2)))

inputは整数であり、数値またはマイナス記号のどちらが読み取られたかを示します(ループ内のinput=1input=2が意図されています)。

これで、プログラムは数値に対して機能しますが、マイナス記号を入力すると、最初の記号はscanf()それを読み取りますが、明らかに元に戻さないため、2番目の記号scanf()は何も検出せず、プログラムを終了します。

ただし、--(2つのマイナス記号)を入力すると、最初の記号が1scanf()つを読み取り、2番目の記号がもう1つをscanf()読み取り、すべて正しく機能します。

コマンドラインからの入力は変更できません。マイナス記号を1つ使用する必要があります。これを解決する最良の方法は何ですか?

入力を読み取って確認する方法は知っていgetchar()ますが、面倒なことはしたくないことに注意してください。

4

1 に答える 1

4

最良の方法は、プッシュバックに依存する脆弱な読み取りチェーンに依存せずに、テキストの行全体をバッファーに読み取ってから、バッファーの内容を検査することです。

fgets()とを使用するだけsscanf()です。

于 2012-05-10T08:06:37.193 に答える