回答編集履歴

2

修正

2017/11/13 13:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  こんな風になるんですね。(一行目が入力、二行目が出力)
64
64
 
65
- **scanfで読み切れなかった文字列がに回ってしまうのです。**
65
+ **一回目のscanfで読み切れなかった文字列が二回目に回ってしまうのです。**
66
66
 
67
67
 
68
68
 

1

追記

2017/11/13 13:19

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -5,3 +5,79 @@
5
5
 
6
6
 
7
7
  また、ご提示のコードの場合、ループはfor文で記述した方が良いかと思われます。
8
+
9
+
10
+
11
+ コメントを受けて
12
+
13
+ ---
14
+
15
+ **バッファについて**
16
+
17
+ 入力はまずバッファ領域に置かれ、それから書式指定子に従って値を変数に保管します。
18
+
19
+ たとえば、こんなコードを書いたとします。
20
+
21
+ ```C
22
+
23
+ #include <stdio.h>
24
+
25
+
26
+
27
+ int main(void) {
28
+
29
+ char hoge;
30
+
31
+ char fuga[100];
32
+
33
+
34
+
35
+ scanf("%c", &hoge);
36
+
37
+ scanf("%s", fuga);
38
+
39
+
40
+
41
+ printf("%c, %s\n", hoge, fuga);
42
+
43
+ return 0;
44
+
45
+ }
46
+
47
+ ```
48
+
49
+
50
+
51
+ 『一文字入力してから、文を入力』という意図かと思いますが、これを無視すると...
52
+
53
+ ```
54
+
55
+ hogehoge
56
+
57
+ h, ogehoge
58
+
59
+ ```
60
+
61
+
62
+
63
+ こんな風になるんですね。(一行目が入力、二行目が出力)
64
+
65
+ **scanfで読み切れなかった文字列が次に回ってしまうのです。**
66
+
67
+
68
+
69
+ ---
70
+
71
+ **for文について**
72
+
73
+ for文とwhile文は、だいたいのケースで置き換え可能です。
74
+
75
+ しかしそれでは分かりにくいため、なんとなく使い分けが存在します。
76
+
77
+
78
+
79
+ `for(int i = 0; i < 10; i++) {`を見ただけで、10回繰り返すことが自明になります。
80
+
81
+
82
+
83
+ もう少し使い分けについて書こうと思ったのですが、なんとも不明瞭になってしまうのでやめました。