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

回答編集履歴

2

誤字修正

2019/01/16 10:37

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -9,7 +9,10 @@
9
9
  次のように代入抑止を使うと改行文字を上手く捌くことができます。
10
10
  ```C
11
11
  scanf("%c%d%d%d%d%d%*c", 略...);
12
- ~~~ 一文字空読みしてくれる
12
+ ~~~ 一文字空読みしてくれる
13
13
  ```
14
14
 
15
- 参考: [Wikipedia - scanf - 改行文字の取り扱い](https://ja.wikipedia.org/wiki/Scanf#%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84)
15
+ 参考: [Wikipedia - scanf - 改行文字の取り扱い](https://ja.wikipedia.org/wiki/Scanf#%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84)
16
+
17
+ scanfが欠陥を孕んだ関数であることは確かなので、早い段階で捨ててしまうのも大いにアリです。
18
+ 個人的には学習目的で使う分には構わないんじゃないかとも思いますが。

1

追記

2019/01/16 10:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -2,4 +2,14 @@
2
2
  for(i=0; i<n; i++)scanf("%c%d%d%d%d%d", &t[n], &e[n], &m[n], &s[n], &j[n], &g[n]);
3
3
  > ```
4
4
 
5
- 引数に渡すべきアドレスは &t[n] ではなく &t[i] では。他も同様。
5
+ 引数に渡すべきアドレスは &t[n] ではなく &t[i] では。他も同様。
6
+
7
+ ---
8
+ scanfで入力を読み取るときは、バッファに改行文字が残ることに留意する必要があります。
9
+ 次のように代入抑止を使うと改行文字を上手く捌くことができます。
10
+ ```C
11
+ scanf("%c%d%d%d%d%d%*c", 略...);
12
+ ~~~ 一文字文空読みしてくれる
13
+ ```
14
+
15
+ 参考: [Wikipedia - scanf - 改行文字の取り扱い](https://ja.wikipedia.org/wiki/Scanf#%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84)