回答編集履歴

10

文言修正

2020/08/15 18:10

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,6 +1,8 @@
1
1
  `scanf`では末尾の区切り文字(半角スペース,タブ,改行)が入力バッファに残るからです。
2
2
 
3
+ そのため次の`fgets`では改行が取得されます。
4
+
3
- そのため改行に限らず、`scanf`に対して数値の後に半角スペース区切りで文字列を入力した場合、次の`fgets`では半角スペース以降が取得されます。
5
+ `scanf`に対して数値の後に半角スペース区切りで文字列を入力した場合、次の`fgets`では半角スペース以降が取得されます。
4
6
 
5
7
  ```C
6
8
 

9

文言修正

2020/08/15 18:10

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  以下のようにすると数値以降の改行まで読み捨てられます。
28
28
 
29
- 書式文字列を一つにまとめるうまくいきません。
29
+ 書式文字列を一つにまとめてしまうと、数値の後すぐに改行があ場合や数値以外が入力された場合に書式文字列にマッチしなくなるためうまくいきません。
30
30
 
31
31
  ```C
32
32
 

8

コメント追記

2020/08/15 16:26

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -32,8 +32,8 @@
32
32
 
33
33
  scanf("%d", &i);
34
34
 
35
- scanf("%*[^\n]");
35
+ scanf("%*[^\n]");//改行文字以外を読み捨て
36
36
 
37
- scanf("%*c");
37
+ scanf("%*c");//改行文字を読み捨て
38
38
 
39
39
  ```

7

コード追記

2020/08/15 16:25

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -19,3 +19,21 @@
19
19
  として数値の後に改行を入力すれば、数値読み取り後に入力バッファに改行(`10`:`\n`)が残っていることが確認できます。
20
20
 
21
21
  (`%c`は区切り文字も読み込めるため確認できます)
22
+
23
+
24
+
25
+ ---
26
+
27
+ 以下のようにすると数値以降の改行まで読み捨てられます。
28
+
29
+ 書式文字列を一つにまとめるとうまくいきません。
30
+
31
+ ```C
32
+
33
+ scanf("%d", &i);
34
+
35
+ scanf("%*[^\n]");
36
+
37
+ scanf("%*c");
38
+
39
+ ```

6

文言修正

2020/08/15 16:23

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,4 @@
1
- `scanf`では末尾の半角スペースタブ改行などの区切り文字が入力バッファに残るからです。
1
+ `scanf`では末尾の区切り文字(半角スペース,タブ,改行)が入力バッファに残るからです。
2
2
 
3
3
  そのため改行に限らず、`scanf`に対して数値の後に半角スペース区切りで文字列を入力した場合、次の`fgets`では半角スペース以降が取得されます。
4
4
 

5

文言修正

2020/08/15 16:16

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,6 @@
1
1
  `scanf`では末尾の半角スペース,タブ,改行などの区切り文字が入力バッファに残るからです。
2
+
3
+ そのため改行に限らず、`scanf`に対して数値の後に半角スペース区切りで文字列を入力した場合、次の`fgets`では半角スペース以降が取得されます。
2
4
 
3
5
  ```C
4
6
 
@@ -14,6 +16,6 @@
14
16
 
15
17
  ```
16
18
 
17
- とすれば、数値読み取り後に入力バッファに改行(`10`:`\n`)が残っていることが確認できます。
19
+ して数値の後に改行を入力すれば、数値読み取り後に入力バッファに改行(`10`:`\n`)が残っていることが確認できます。
18
20
 
19
21
  (`%c`は区切り文字も読み込めるため確認できます)

4

文言修正

2020/08/15 16:13

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,4 @@
1
- `scanf`では末尾の改行が入力バッファに残るからです。
1
+ `scanf`では末尾の半角スペース,タブ,改行などの区切り文字が入力バッファに残るからです。
2
2
 
3
3
  ```C
4
4
 
@@ -15,3 +15,5 @@
15
15
  ```
16
16
 
17
17
  とすれば、数値読み取り後に入力バッファに改行(`10`:`\n`)が残っていることが確認できます。
18
+
19
+ (`%c`は区切り文字も読み込めるため確認できます)

3

文言修正

2020/08/15 16:08

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,4 @@
1
- `scanf`で数値読み取り後に末尾の改行が入力バッファに残っているからです。
1
+ `scanf`で末尾の改行が入力バッファに残るからです。
2
2
 
3
3
  ```C
4
4
 

2

文言修正

2020/08/15 16:05

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1,4 +1,4 @@
1
- `scanf`で末尾の改行が入力バッファに残っているからです。
1
+ `scanf`で数値読み取り後に末尾の改行が入力バッファに残っているからです。
2
2
 
3
3
  ```C
4
4
 
@@ -14,4 +14,4 @@
14
14
 
15
15
  ```
16
16
 
17
- とすれば、数値読み取り後入力バッファに改行(`10`:`\n`)が残っていることが確認できます。
17
+ とすれば、数値読み取り後入力バッファに改行(`10`:`\n`)が残っていることが確認できます。

1

書式修正

2020/08/15 15:57

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -14,4 +14,4 @@
14
14
 
15
15
  ```
16
16
 
17
- とすれば、数値読み取り後も入力バッファに改行(10:`\n`)が残っていることが確認できます。
17
+ とすれば、数値読み取り後も入力バッファに改行(`10`:`\n`)が残っていることが確認できます。