質問編集履歴

2

2020/04/30 10:19

投稿

L4zy
L4zy

スコア18

test CHANGED
File without changes
test CHANGED
@@ -8,182 +8,4 @@
8
8
 
9
9
  #include <stdio.h>
10
10
 
11
- #include <string.h> // strtok, strlen, memset
11
+ #include <string.h> // strtok, strlen, memset```
12
-
13
- #include <stdlib.h> // malloc
14
-
15
- #include <ctype.h> // isdigit
16
-
17
- #include <stdlib.h> // atoi
18
-
19
-
20
-
21
- int spacePart(char str[], char **num, int cnt);
22
-
23
- int numCheck(char *num[], int numCnt);
24
-
25
- void hashInsert(char *num[], int *hashArray[][7], int numCnt);
26
-
27
- // ハッシュ探索を行う関数 引数:なし 戻り値:0
28
-
29
- int main()
30
-
31
- {
32
-
33
- int flg = 0, numCnt, find, *hashArray[100][7] = {};
34
-
35
- char str[1000], *num[100];
36
-
37
- // メモリ確保
38
-
39
- *num = (char *)malloc(sizeof(str));
40
-
41
-
42
-
43
- while(flg == 0)
44
-
45
- {
46
-
47
- puts("100個以内の数値を入力してください。");
48
-
49
- fgets(str, 1000, stdin);
50
-
51
-
52
-
53
- // 文字列を空白ごと分け、入力値の数を代入する
54
-
55
- numCnt = spacePart(str, num, 100);
56
-
57
-
58
-
59
- // 入力値が数値だったら
60
-
61
- if(numCheck(num, numCnt) == 1) flg = 1;
62
-
63
- else puts("入力値が正しくありません。");
64
-
65
- }
66
-
67
- // ハッシュ値に数値を代入する
68
-
69
- hashInsert(num, hashArray, numCnt);
70
-
71
-
72
-
73
-
74
-
75
- //ここでなーい
76
-
77
- printf("%d %d\n", hashArray[0][1], hashArray[0][2]);
78
-
79
-
80
-
81
-
82
-
83
- printf("探索対象の数値を入力してください:");
84
-
85
- scanf("%d", find);
86
-
87
- return 0;
88
-
89
- }
90
-
91
-
92
-
93
- // 文字列を空白ごとに分けて配列に格納し、入力値の数を返す関数
94
-
95
- // 引数:入力値、配列、100 戻り値:数値の数
96
-
97
- int spacePart(char str[], char **num, int cnt)
98
-
99
- {
100
-
101
- // 空白区切りに文字列を分割
102
-
103
- num[0] = strtok(str, " \n");
104
-
105
- int i;
106
-
107
-
108
-
109
- // 最大100個
110
-
111
- for(i = 1; i < cnt; i++)
112
-
113
- {
114
-
115
- num[i] = strtok(NULL, " \n");
116
-
117
- // 区切った文字列がNULLだったら
118
-
119
- if(num[i] == NULL) break;
120
-
121
- }
122
-
123
- num[i] = NULL; // 終わりのしるし
124
-
125
- free(num); // メモリ解放
126
-
127
- return i;
128
-
129
- }
130
-
131
-
132
-
133
- // 入力文字列が数値がチェックする関数 引数:入力値 戻り値:数値1 数値ではない0
134
-
135
- int numCheck(char *num[], int numCnt)
136
-
137
- {
138
-
139
- char *temp;
140
-
141
- // 配列に値がある間
142
-
143
- for(int i = 0; i < numCnt; i++)
144
-
145
- {
146
-
147
- temp = num[i];
148
-
149
- for(int j = 0; j < strlen(temp); j++)
150
-
151
- {
152
-
153
- // 数値ではなかったら
154
-
155
- if( !isdigit(temp[j]) ) return 0;
156
-
157
- }
158
-
159
- }
160
-
161
- return 1;
162
-
163
- }
164
-
165
-
166
-
167
- // 入力した数値を7で割った余りの配列に代入する関数 
168
-
169
- // 引数:入力値、ハッシュ配列、数値の数 戻り値:なし
170
-
171
- void hashInsert(char *num[], int *hashArray[][7], int numCnt)
172
-
173
- {
174
-
175
- int j = 0;
176
-
177
- for(int i = 0; i < numCnt; i++)
178
-
179
- {
180
-
181
- if(*hashArray[j][atoi(num[i]) % 7] == 0) *hashArray[j][atoi(num[i]) % 7] = atoi(num[i]);
182
-
183
- else j++;
184
-
185
- }
186
-
187
- }
188
-
189
- ```

1

文法の修正

2020/04/30 10:19

投稿

L4zy
L4zy

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,172 @@
1
- if文が動きません。
1
+ 一番下のif文が動きません。
2
2
 
3
3
  どこが悪さしているのでしょうか?
4
4
 
5
5
 
6
6
 
7
7
  ```C
8
+
9
+ #include <stdio.h>
10
+
11
+ #include <string.h> // strtok, strlen, memset
12
+
13
+ #include <stdlib.h> // malloc
14
+
15
+ #include <ctype.h> // isdigit
16
+
17
+ #include <stdlib.h> // atoi
18
+
19
+
20
+
21
+ int spacePart(char str[], char **num, int cnt);
22
+
23
+ int numCheck(char *num[], int numCnt);
24
+
25
+ void hashInsert(char *num[], int *hashArray[][7], int numCnt);
26
+
27
+ // ハッシュ探索を行う関数 引数:なし 戻り値:0
28
+
29
+ int main()
30
+
31
+ {
32
+
33
+ int flg = 0, numCnt, find, *hashArray[100][7] = {};
34
+
35
+ char str[1000], *num[100];
36
+
37
+ // メモリ確保
38
+
39
+ *num = (char *)malloc(sizeof(str));
40
+
41
+
42
+
43
+ while(flg == 0)
44
+
45
+ {
46
+
47
+ puts("100個以内の数値を入力してください。");
48
+
49
+ fgets(str, 1000, stdin);
50
+
51
+
52
+
53
+ // 文字列を空白ごと分け、入力値の数を代入する
54
+
55
+ numCnt = spacePart(str, num, 100);
56
+
57
+
58
+
59
+ // 入力値が数値だったら
60
+
61
+ if(numCheck(num, numCnt) == 1) flg = 1;
62
+
63
+ else puts("入力値が正しくありません。");
64
+
65
+ }
66
+
67
+ // ハッシュ値に数値を代入する
68
+
69
+ hashInsert(num, hashArray, numCnt);
70
+
71
+
72
+
73
+
74
+
75
+ //ここでなーい
76
+
77
+ printf("%d %d\n", hashArray[0][1], hashArray[0][2]);
78
+
79
+
80
+
81
+
82
+
83
+ printf("探索対象の数値を入力してください:");
84
+
85
+ scanf("%d", find);
86
+
87
+ return 0;
88
+
89
+ }
90
+
91
+
92
+
93
+ // 文字列を空白ごとに分けて配列に格納し、入力値の数を返す関数
94
+
95
+ // 引数:入力値、配列、100 戻り値:数値の数
96
+
97
+ int spacePart(char str[], char **num, int cnt)
98
+
99
+ {
100
+
101
+ // 空白区切りに文字列を分割
102
+
103
+ num[0] = strtok(str, " \n");
104
+
105
+ int i;
106
+
107
+
108
+
109
+ // 最大100個
110
+
111
+ for(i = 1; i < cnt; i++)
112
+
113
+ {
114
+
115
+ num[i] = strtok(NULL, " \n");
116
+
117
+ // 区切った文字列がNULLだったら
118
+
119
+ if(num[i] == NULL) break;
120
+
121
+ }
122
+
123
+ num[i] = NULL; // 終わりのしるし
124
+
125
+ free(num); // メモリ解放
126
+
127
+ return i;
128
+
129
+ }
130
+
131
+
132
+
133
+ // 入力文字列が数値がチェックする関数 引数:入力値 戻り値:数値1 数値ではない0
134
+
135
+ int numCheck(char *num[], int numCnt)
136
+
137
+ {
138
+
139
+ char *temp;
140
+
141
+ // 配列に値がある間
142
+
143
+ for(int i = 0; i < numCnt; i++)
144
+
145
+ {
146
+
147
+ temp = num[i];
148
+
149
+ for(int j = 0; j < strlen(temp); j++)
150
+
151
+ {
152
+
153
+ // 数値ではなかったら
154
+
155
+ if( !isdigit(temp[j]) ) return 0;
156
+
157
+ }
158
+
159
+ }
160
+
161
+ return 1;
162
+
163
+ }
164
+
165
+
166
+
167
+ // 入力した数値を7で割った余りの配列に代入する関数 
168
+
169
+ // 引数:入力値、ハッシュ配列、数値の数 戻り値:なし
8
170
 
9
171
  void hashInsert(char *num[], int *hashArray[][7], int numCnt)
10
172