電子書籍の厳選無料作品が豊富!

【C言語】

①なぜ写真のように赤線のように2つの文が連続で出てきてしまうのですか?
②なぜ白枠のように'n'でbreakしたのにさらに文が出て終了するのですか?

教えて欲しいです。

「【C言語】 ①なぜ写真のように赤線のよう」の質問画像

A 回答 (2件)

1回目の scanf のとき、3 のキーを押しただけでは入力が行われず、


3 の後にリターンキーを教してはじめてキーボードから標準入力へ
入力が行われます。そのあと、文字 '3' が scanf("%d" で取り込まれ、
リターンキーに対する文字 '\n' は数字でないのでバッファに残ります。
次の scanf("%c" でこの '\n' が answer へ取り込まれるため、
"Continue? " への答えが "else:yes" だと解釈されるのです。

2回目の "Please input number " に n, リーターンキー と反応すると、
scanf("%d" は標準入力から 'n', '\n' という文字の列を受け取ろうとして
n が数字でないので %d 変換を中止します。このため
input の値は破壊されず、前のループのときの値 3 のままです。
次の scanf("%c" でバッファに残された 'n' が answer へ取り込まれるため、
"Continue? " への答えが "n:no" だと解釈されます。
このとき、'n', '\n' の '\n' はまだバッファにのこったままです。
    • good
    • 0

画像だとボケてて見にくいですよ。


少なくともコードは質問文に貼り付けた方がいいでしょう。(インデントは無くなりますが)
大学の課題…ならこのカテゴリでいいんでしょうかねぇ?

scanf()での入力の場合、改行コードとかが入力バッファに残ったりします。
そのあたりではないですかね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!