06/07/14 17:19:31
>>833
scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。
8進数だから、7、8、9なんかは入力できない。
すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。
17dとか入力しても同様。
型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。
標準入力ストリームがバッファリングの構造を取るから。
型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。
環境によっては、scanf("%d",i);のところで、a、とか入力すると、
型が違うものだからバッファに戻す→バッファからaがscanfに入力される
というルーチンを延々と繰り返してしまう。
この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。