回答編集履歴
4
説明追加
answer
CHANGED
@@ -5,16 +5,14 @@
|
|
5
5
|
sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
|
6
6
|
printf("%s %d %d", arr, num1, num2);
|
7
7
|
```
|
8
|
+
fgets() ではなく、``` gets_s(array, sizeof(array)); ``` でも良いはず。要は、いったん一行全部を array[] に読み込んでしまう、その後でゆっくり分解する。
|
8
9
|
|
10
|
+
scanf(), scanf_s() は、入力文字列を空白文字で区切ってしまうのが基本動作なので
|
11
|
+
"ABC 123 987" とタイプしても array[] には "ABC" しか入力されないと思う。そういうことは** printf デバッグで確かめれば済む**こと。
|
9
12
|
|
13
|
+
----
|
10
|
-
scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**ので
|
14
|
+
scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**ので sizeof(arr) を使うなら
|
11
15
|
```C
|
12
|
-
sscanf_s(array, "%s %d %d", arr, 10, &num1, &num2);
|
13
|
-
```
|
14
|
-
を試してください(私は動作未確認)。
|
15
|
-
~~10 は配列 arr[] の大きさです。char arr[10]; だから 10 バイトです。~~←不要だった
|
16
|
-
sizeof(arr) を使うなら
|
17
|
-
```C
|
18
16
|
sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
|
19
17
|
```
|
20
18
|
|
3
fgets() を使う
answer
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
たぶん、こうすればよい。
|
2
|
+
```C
|
3
|
+
fgets(array, sizeof(array), stdin); // scanf_s() では不可
|
4
|
+
printf("array:[%s]\n", array); // デバッグプリント
|
5
|
+
sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
|
6
|
+
printf("%s %d %d", arr, num1, num2);
|
7
|
+
```
|
8
|
+
|
9
|
+
|
1
10
|
scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**ので
|
2
11
|
```C
|
3
12
|
sscanf_s(array, "%s %d %d", arr, 10, &num1, &num2);
|
2
ケアレスミス発見
answer
CHANGED
@@ -7,4 +7,10 @@
|
|
7
7
|
sizeof(arr) を使うなら
|
8
8
|
```C
|
9
9
|
sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
|
10
|
+
```
|
11
|
+
|
12
|
+
ケアレスミス・タイポ発見
|
13
|
+
```C
|
14
|
+
printf("&s %d %d", arr, num1, num2); // NG
|
15
|
+
printf("%s %d %d", arr, num1, num2); // OK
|
10
16
|
```
|
1
sizeof(arr) を使う例を追加
answer
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。
|
1
|
+
scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**ので
|
2
2
|
```C
|
3
3
|
sscanf_s(array, "%s %d %d", arr, 10, &num1, &num2);
|
4
4
|
```
|
5
5
|
を試してください(私は動作未確認)。
|
6
|
-
10 は配列 arr[] の大きさです。char arr[10]; だから 10 バイトです。
|
6
|
+
~~10 は配列 arr[] の大きさです。char arr[10]; だから 10 バイトです。~~←不要だった
|
7
|
+
sizeof(arr) を使うなら
|
8
|
+
```C
|
9
|
+
sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
|
10
|
+
```
|