質問するログイン新規登録

回答編集履歴

4

説明追加

2019/06/30 11:42

投稿

rubato6809
rubato6809

スコア1382

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() を使う

2019/06/30 11:42

投稿

rubato6809
rubato6809

スコア1382

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

ケアレスミス発見

2019/06/30 11:20

投稿

rubato6809
rubato6809

スコア1382

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) を使う例を追加

2019/06/30 11:04

投稿

rubato6809
rubato6809

スコア1382

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
+ ```