teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤字の修正

2020/07/08 00:24

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -31,11 +31,11 @@
31
31
  int main(void)
32
32
  ```
33
33
  **追記2**
34
- この scanf("%*[^\n]"); による現在の行の不正文字読み飛ばしには
34
+ この scanf("%*[^\n]"); による現在の行の不正文字読み飛ばしには
35
35
  注意しなければならないことがあります。
36
36
  それは行末の '\n' が入力バッファに残っているということです。
37
37
 
38
- 次の入力が scanf("%d" や scanf("%s などであれば、
38
+ 次の入力処理が scanf("%d" や scanf("%s などであれば、
39
39
  その '\n' を呼び飛ばしてくれるので問題ありません。
40
40
 
41
41
  しかし、scanf("%c" や scanf("%[ では、'\n' を読み込んでしまいます。

2

コードの注意点を追記

2020/07/08 00:24

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -29,4 +29,14 @@
29
29
  }
30
30
 
31
31
  int main(void)
32
- ```
32
+ ```
33
+ **追記2**
34
+ この scanf("%*[^\n]"); による現在の行の不正文字は読み飛ばしには
35
+ 注意しなければならないことがあります。
36
+ それは行末の '\n' が入力バッファに残っているということです。
37
+
38
+ 次の入力が scanf("%d" や scanf("%s などであれば、
39
+ その '\n' を呼び飛ばしてくれるので問題ありません。
40
+
41
+ しかし、scanf("%c" や scanf("%[ では、'\n' を読み込んでしまいます。
42
+ また、getchar() や fgets でも '\n' を文字として読み込んでしまいます。

1

コードを追加

2020/07/07 14:31

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -13,4 +13,20 @@
13
13
  printf("0~2の数字を再度入力して下さい\n");
14
14
  }
15
15
  }
16
+ ```
17
+ **追記**
18
+ scanf は、もう一つあったんですね。
19
+ ```diff
20
+ {
21
+ int x;
22
+ printf("もう一度しますか""(0)いいえ (1)はい :");
23
+ - scanf("%d", &x);
24
+ -
25
+ - return x;
26
+ + if (scanf("%d", &x) == 1) return x;
27
+ + scanf("%*[^\n]"); // 行末まで不正な文字を読み飛ばす
28
+ + return 2;
29
+ }
30
+
31
+ int main(void)
16
32
  ```