回答編集履歴
4
修正しわすれがあった...
test
CHANGED
@@ -124,7 +124,7 @@
|
|
124
124
|
|
125
125
|
for (int i=0; i<N; i++){
|
126
126
|
|
127
|
-
scanf("%
|
127
|
+
scanf("%s",S[i]);
|
128
128
|
|
129
129
|
}
|
130
130
|
|
3
scanfの書式指定の使い方に誤りがあったので訂正
test
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
|
5
5
|
2次元配列を考えてて、うまく行かなくて1次元にしたけどなんだか中途半端に前の考えが残っちゃってる、とかいうところかしら?
|
6
6
|
|
7
|
-
確保の仕方はとりあえずそれでOK。
|
7
|
+
mallocによる確保の仕方はとりあえずそれでOK。
|
8
|
+
|
9
|
+
(追記:本当は失敗したときのチェックをいれるのがお作法)
|
8
10
|
|
9
11
|
|
10
12
|
|
@@ -46,7 +48,7 @@
|
|
46
48
|
|
47
49
|
なので、配列のその場所に取り込むscanfは
|
48
50
|
|
49
|
-
`scanf("%
|
51
|
+
`scanf("%s",&S[i*(L+1)])`あるいは同じことだけど`scanf("%s",S+i*(L+1))`
|
50
52
|
|
51
53
|
対応するprintfは
|
52
54
|
|
@@ -78,7 +80,7 @@
|
|
78
80
|
|
79
81
|
for (int i=0; i<N; i++){
|
80
82
|
|
81
|
-
scanf("%
|
83
|
+
scanf("%s",S[i]);
|
82
84
|
|
83
85
|
}
|
84
86
|
|
@@ -145,3 +147,27 @@
|
|
145
147
|
|
146
148
|
|
147
149
|
最後に、どうでもいいといえばどうでもいいけど、「障害が発生した」という言い方は、コンピュータのシステムを扱っているギョーカイではユーザーじゃなくてシステム側に問題が出たことの意味だったりする。今回の話にはちょっと不適切。
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
---
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
追記。
|
158
|
+
|
159
|
+
printfでは書式指定子中に"*"があるとパラメータから取り込んだ数値に置き換えてくれる機能があって、scanfでもそれが使えるような勘違いをしたので修正したわけですけれど、そういうことをしたいのなら
|
160
|
+
|
161
|
+
```C
|
162
|
+
|
163
|
+
char format[32];
|
164
|
+
|
165
|
+
int L=10;
|
166
|
+
|
167
|
+
sprintf(format,"%%%ds",L); //結果、formatは"%10s"という文字列になる
|
168
|
+
|
169
|
+
scanf(format,S[i]); //書式指定子は文字列リテラルである必要はない
|
170
|
+
|
171
|
+
```
|
172
|
+
|
173
|
+
なんていう手段はあります。
|
2
さらに訂正
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
一般化すれば
|
44
44
|
|
45
|
-
S[i*(L+1)]~L文字分、ということですね。
|
45
|
+
S[i*(L+1)]~L+1文字分、ということですね。
|
46
46
|
|
47
47
|
なので、配列のその場所に取り込むscanfは
|
48
48
|
|
1
誤記訂正
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
一般化すれば
|
44
44
|
|
45
|
-
S[*
|
45
|
+
S[i*(L+1)]~L文字分、ということですね。
|
46
46
|
|
47
47
|
なので、配列のその場所に取り込むscanfは
|
48
48
|
|