C言語学習ポータル(無料版) 学習コンテンツ つまずきとエラー scanf のあとに改行が残る

🚪 はじめてのC

scanf のあとに改行が残る

どんなときに起きるか

scanf("%d", &age); の次に置いた scanf("%c", &c) や fgets が、入力を待たずに素通りします。「聞かれないまま次に進んでしまう」典型症状です。

なぜそうなるのか

%d は数字の部分だけを読み取り、Enterキーで入った改行 \n を入力バッファに残します。次の %c や fgets が、その残った改行を最初の入力として読んでしまいます。

直し方・再発防止

scanf(" %c", &c) のように書式の先頭に空白を1つ置くと、空白や改行を読み飛ばせます。明示的に捨てるなら int ch; while ((ch = getchar()) != '\n' && ch != EOF);。一番堅実なのは、入力は必ず fgets で1行受け取り、sscanf で解析する形に統一することです。

改行、残ってます(4コマ漫画)
4コマで見る「改行、残ってます」

アプリでしっかり学ぶ(無料・登録不要) つまずき一覧へ

同じ場面で起きやすいつまずき

セミコロンの書き忘れerror: expected ';' before 'printf' や error: expected ';… scanf で & を付け忘れるscanf("%d", n); と書くと gcc は warning: format '%d' expects … printf の書式指定子と型が合っていないprintf("%d\n", 3.14); が 0 や意味不明な数を表示します。printf("%s\n", 5…

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH