回答編集履歴

4

説明追加

2019/06/30 11:42

投稿

rubato6809
rubato6809

スコア1380

test CHANGED
@@ -12,23 +12,19 @@
12
12
 
13
13
  ```
14
14
 
15
+ fgets() ではなく、``` gets_s(array, sizeof(array)); ``` でも良いはず。要は、いったん一行全部を array[] に読み込んでしまう、その後でゆっくり分解する。
15
16
 
16
17
 
17
18
 
19
+ scanf(), scanf_s() は、入力文字列を空白文字で区切ってしまうのが基本動作なので
18
20
 
19
- scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きを指定しなけりません。**配列の名前の次に配列の大きさを指定する**ので
21
+ "ABC 123 987" とタイプしても array[] には "ABC" しか入力されないと思うそういうことは** printf デバッグで確かめれば済む**こと。
20
22
 
21
- ```C
22
23
 
23
- sscanf_s(array, "%s %d %d", arr, 10, &num1, &num2);
24
24
 
25
- ```
25
+ ----
26
26
 
27
- を試してください(私は動作未確認)。
28
-
29
- ~~10 は配列 arr[] の大きさです。char arr[10]; だか 10 バイトです。~~←不要だった
27
+ scanf_s() 等で文字列を入力する場合、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**のsizeof(arr) を使うな
30
-
31
- sizeof(arr) を使うなら
32
28
 
33
29
  ```C
34
30
 

3

fgets() を使う

2019/06/30 11:42

投稿

rubato6809
rubato6809

スコア1380

test CHANGED
@@ -1,3 +1,21 @@
1
+ たぶん、こうすればよい。
2
+
3
+ ```C
4
+
5
+ fgets(array, sizeof(array), stdin); // scanf_s() では不可
6
+
7
+ printf("array:[%s]\n", array); // デバッグプリント
8
+
9
+ sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
10
+
11
+ printf("%s %d %d", arr, num1, num2);
12
+
13
+ ```
14
+
15
+
16
+
17
+
18
+
1
19
  scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列の名前の次に配列の大きさを指定する**ので
2
20
 
3
21
  ```C

2

ケアレスミス発見

2019/06/30 11:20

投稿

rubato6809
rubato6809

スコア1380

test CHANGED
@@ -17,3 +17,15 @@
17
17
  sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ ケアレスミス・タイポ発見
24
+
25
+ ```C
26
+
27
+ printf("&s %d %d", arr, num1, num2); // NG
28
+
29
+ printf("%s %d %d", arr, num1, num2); // OK
30
+
31
+ ```

1

sizeof(arr) を使う例を追加

2019/06/30 11:04

投稿

rubato6809
rubato6809

スコア1380

test CHANGED
@@ -1,4 +1,4 @@
1
- scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。ので
1
+ scanf_s() 等で文字列を入力する場合は、文字列を格納する配列の大きさを指定しなければなりません。**配列名前の次に配列の大きさを指定する**の
2
2
 
3
3
  ```C
4
4
 
@@ -8,4 +8,12 @@
8
8
 
9
9
  を試してください(私は動作未確認)。
10
10
 
11
- 10 は配列 arr[] の大きさです。char arr[10]; だから 10 バイトです。
11
+ ~~10 は配列 arr[] の大きさです。char arr[10]; だから 10 バイトです。~~←不要だった
12
+
13
+ sizeof(arr) を使うなら
14
+
15
+ ```C
16
+
17
+ sscanf_s(array, "%s %d %d", arr, sizeof(arr), &num1, &num2);
18
+
19
+ ```