回答編集履歴

2

fix

2017/10/07 01:05

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -10,4 +10,4 @@
10
10
 
11
11
 
12
12
 
13
- 書式指定としての`\n`は「任意個空白文字または改行文字を要求する」ことを意味します。つまり`"%d\n"`は「数値+空白or改行」の入力を待機するため、「`1`, (改行a), `2`, (改行b)」という入力に対し改行aは"空白or改行"として消化されてしまい、(改行b)でやっと1回目の`scanf`呼び出しが完了します。このとき`2`は解釈されずに残っているため、次回の`scanf`呼び出しで消化されるという動きになります。
13
+ 書式指定としての`\n`は「位置に改行文字を要求する」ことを意味します。つまり`"%d\n"`は「数値+改行文字」の入力を待機するため、「`1`, (改行a), `2`, (改行b)」という入力に対し改行aは"改行文字"として消化されてしまい、(改行b)でやっと1回目の`scanf`呼び出しが完了します。このとき`2`は解釈されずに残っているため、次回の`scanf`呼び出しで消化されるという動きになります。

1

update

2017/10/07 01:05

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -7,3 +7,7 @@
7
7
  scanf("%d", &data[i]);
8
8
 
9
9
  ```
10
+
11
+
12
+
13
+ 書式指定としての`\n`は「任意個の空白文字または改行文字を要求する」ことを意味します。つまり`"%d\n"`は「数値+空白or改行」の入力を待機するため、「`1`, (改行a), `2`, (改行b)」という入力に対し改行aは"空白or改行"として消化されてしまい、(改行b)でやっと1回目の`scanf`呼び出しが完了します。このとき`2`は解釈されずに残っているため、次回の`scanf`呼び出しで消化されるという動きになります。