あなたは2つの機能で標準入力から読んでいます:getchar()
とscanf()
。それらがどのように機能するかを理解する必要があります。
getchar()
簡単です:入力ストリームで次に使用可能な文字を返します(または1つ待つか、戻りますEOF
)
scanf("%d", ...)
より複雑です。最初に、オプションで空白(スペース、Enter、タブなど)を破棄し、次に整数を表すためにできるだけ多くの文字を読み取り、整数に使用できない最初の文字で停止します。のように'\n'
。
それらをループに入れているので、あなたのgetchar()
呼び出しは停止したキャラクターを取得しscanf()
、次scanf()
はそこから進みます。
入力が"q1w22e333r4444"
(MAX == 4の場合)のようなものである場合、プログラムは機能します。
入力が次のようなものである場合
q 1
w 22
e 333
r 4444
ループを最初に通過した後(charray[0]
gets'q'
とinarray[0]
gets 1
)、はscanfの「準備完了」を離れgetchar()
ますが、これはもちろん失敗します...そして次の;によって「キャッチ」されます。そして、はループを介して3回目に割り当てられます(to )。'\n'
'w'
getchar()
"22"
inarray[2]
したがって、コードを確認する必要があります。
また、scanf()
値を返します。その値を使用する
if (scanf("%d", &inarray[i]) != 1) /* error */;