回答編集履歴

2

追記

2019/10/22 14:57

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -130,7 +130,9 @@
130
130
 
131
131
 
132
132
 
133
- 実行結果は毎回変わり得ます。そそも実行できる保証もありません
133
+ 実行結果は毎回変わり得ます。それこ全部1になっておかしくありません。
134
+
135
+ そもそも実行できる保証もありませんが。
134
136
 
135
137
 
136
138
 

1

追記

2019/10/22 14:57

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,7 @@
1
+ 問題点1
2
+
3
+ ---
4
+
1
5
  配列の使い方を間違えています。
2
6
 
3
7
  例えば、この部分は見るからにおかしいです。
@@ -49,3 +53,93 @@
49
53
  後者のコードのような範囲外アクセスは未定義動作を引き起こします。
50
54
 
51
55
  実行環境に依って動作に差異が出ても何ら不思議ではありません。
56
+
57
+
58
+
59
+ 問題点2
60
+
61
+ ---
62
+
63
+ > ```C
64
+
65
+ if (card[i][j] != 1){
66
+
67
+ > ```
68
+
69
+
70
+
71
+ ご提示のコードを書く際、一つ思い込みをしているように思います。
72
+
73
+ **『配列の要素は、最初から何らかの数で埋められているのだ』**... 残念ながら、それは間違いです。
74
+
75
+
76
+
77
+ 次のように実際に試してみることができます。
78
+
79
+ ```C
80
+
81
+ #include <stdio.h>
82
+
83
+
84
+
85
+ int main(void) {
86
+
87
+ int arr[10];
88
+
89
+ for(int i = 0; i < 10; ++i) {
90
+
91
+ printf("%d\n", arr[i]);
92
+
93
+ }
94
+
95
+
96
+
97
+ return 0;
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ **実行結果** [Wandbox](https://wandbox.org/permlink/oq4EF3gJHdFdaaTA)
106
+
107
+ ```
108
+
109
+ 0
110
+
111
+ 0
112
+
113
+ 0
114
+
115
+ 0
116
+
117
+ 4195600
118
+
119
+ 0
120
+
121
+ 4195328
122
+
123
+ 0
124
+
125
+ 787312336
126
+
127
+ 32767
128
+
129
+ ```
130
+
131
+
132
+
133
+ 実行結果は毎回変わり得ます。そもそも実行できる保証もありませんが。
134
+
135
+
136
+
137
+ ---
138
+
139
+ ともかく、次のように明示的に初期化してやる必要があります。
140
+
141
+ ```C
142
+
143
+ int card[4][13] = {0};
144
+
145
+ ```