回答編集履歴

2

追記

2019/12/10 09:23

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -47,3 +47,15 @@
47
47
 
48
48
 
49
49
  普通は printf("flag\n") などと改行するだけでも改善するでしょう。
50
+
51
+
52
+
53
+ コードの貼り方について
54
+
55
+ ---
56
+
57
+ teratailには、コードを見易く表示する機能があります。
58
+
59
+ 質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
60
+
61
+ ![C](4c6e48a3bd0707d89f61b901fd1f8915.gif)

1

追記

2019/12/10 09:23

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -7,3 +7,43 @@
7
7
 
8
8
 
9
9
  scanfの第二引数以降はアドレスを渡すので、scanf("%d", &p->x) が正しいです。
10
+
11
+
12
+
13
+ コンパイラの警告オプションをオンにしておくと、ちゃんと叱って貰えます。
14
+
15
+ 例えばこんなふうに。
16
+
17
+ ```gcc
18
+
19
+ prog.c:19:28: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
20
+
21
+ 19 | while(p=gen_node(),scanf("%d", p->x)!=EOF){
22
+
23
+ | ~^ ~~~~
24
+
25
+ | | |
26
+
27
+ | | int
28
+
29
+ | int *
30
+
31
+ ```
32
+
33
+
34
+
35
+ ---
36
+
37
+ > printf("flag")を入れてまずどこがエラーの原因になっているか絞ろうとした。
38
+
39
+ 結果 → mainの一番最初に入れたflag0も表示されないので、もはやどこに問題があるのかもわからない。
40
+
41
+
42
+
43
+ デバッグプリントを用いること自体は非常に良いアイデアです。
44
+
45
+ しかしこのようなケースでは、バッファに文字列を溜め込まないよう工夫しなければなりません。
46
+
47
+
48
+
49
+ 普通は printf("flag\n") などと改行するだけでも改善するでしょう。