【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
■ このスレッドは過去ログ倉庫に格納されています
0853デフォルトの名無しさん
2007/01/29(月) 23:32:49scanfは普通、その終了時に、標準入力の最後に付加されている「\n」をストリームに放置する。
これはscanfが、特別な指定のない限りは、変換されなかった入力を棄てずに残すからである。
次にscanfを呼んで、最初の変換指定子が数値用のものであればこの\nは棄てられるが、
%cや%sを指定したり、fgetsやgetc(getchar)を使うとそのまま(しかも即座に)取り込まれて
しまって問題が起きることになる。
一般に言って、標準入力を読むときにscanfを使う場合はscanfだけを使うべきである。
fgetsやgetcを混ぜて使うべきではない。また最初の変換指定子が%cや%sである場合は、
前の入力の\n(正確には「 」と「\t」をも含む空白文字)を読み飛ばすことを明示するために、
" %c" のように書かなければならない。
■ このスレッドは過去ログ倉庫に格納されています