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

質問編集履歴

2

2020/04/30 10:19

投稿

L4zy
L4zy

スコア18

title CHANGED
File without changes
body CHANGED
@@ -3,93 +3,4 @@
3
3
 
4
4
  ```C
5
5
  #include <stdio.h>
6
- #include <string.h> // strtok, strlen, memset
6
+ #include <string.h> // strtok, strlen, memset```
7
- #include <stdlib.h> // malloc
8
- #include <ctype.h> // isdigit
9
- #include <stdlib.h> // atoi
10
-
11
- int spacePart(char str[], char **num, int cnt);
12
- int numCheck(char *num[], int numCnt);
13
- void hashInsert(char *num[], int *hashArray[][7], int numCnt);
14
- // ハッシュ探索を行う関数 引数:なし 戻り値:0
15
- int main()
16
- {
17
- int flg = 0, numCnt, find, *hashArray[100][7] = {};
18
- char str[1000], *num[100];
19
- // メモリ確保
20
- *num = (char *)malloc(sizeof(str));
21
-
22
- while(flg == 0)
23
- {
24
- puts("100個以内の数値を入力してください。");
25
- fgets(str, 1000, stdin);
26
-
27
- // 文字列を空白ごと分け、入力値の数を代入する
28
- numCnt = spacePart(str, num, 100);
29
-
30
- // 入力値が数値だったら
31
- if(numCheck(num, numCnt) == 1) flg = 1;
32
- else puts("入力値が正しくありません。");
33
- }
34
- // ハッシュ値に数値を代入する
35
- hashInsert(num, hashArray, numCnt);
36
-
37
-
38
- //ここでなーい
39
- printf("%d %d\n", hashArray[0][1], hashArray[0][2]);
40
-
41
-
42
- printf("探索対象の数値を入力してください:");
43
- scanf("%d", find);
44
- return 0;
45
- }
46
-
47
- // 文字列を空白ごとに分けて配列に格納し、入力値の数を返す関数
48
- // 引数:入力値、配列、100 戻り値:数値の数
49
- int spacePart(char str[], char **num, int cnt)
50
- {
51
- // 空白区切りに文字列を分割
52
- num[0] = strtok(str, " \n");
53
- int i;
54
-
55
- // 最大100個
56
- for(i = 1; i < cnt; i++)
57
- {
58
- num[i] = strtok(NULL, " \n");
59
- // 区切った文字列がNULLだったら
60
- if(num[i] == NULL) break;
61
- }
62
- num[i] = NULL; // 終わりのしるし
63
- free(num); // メモリ解放
64
- return i;
65
- }
66
-
67
- // 入力文字列が数値がチェックする関数 引数:入力値 戻り値:数値1 数値ではない0
68
- int numCheck(char *num[], int numCnt)
69
- {
70
- char *temp;
71
- // 配列に値がある間
72
- for(int i = 0; i < numCnt; i++)
73
- {
74
- temp = num[i];
75
- for(int j = 0; j < strlen(temp); j++)
76
- {
77
- // 数値ではなかったら
78
- if( !isdigit(temp[j]) ) return 0;
79
- }
80
- }
81
- return 1;
82
- }
83
-
84
- // 入力した数値を7で割った余りの配列に代入する関数 
85
- // 引数:入力値、ハッシュ配列、数値の数 戻り値:なし
86
- void hashInsert(char *num[], int *hashArray[][7], int numCnt)
87
- {
88
- int j = 0;
89
- for(int i = 0; i < numCnt; i++)
90
- {
91
- if(*hashArray[j][atoi(num[i]) % 7] == 0) *hashArray[j][atoi(num[i]) % 7] = atoi(num[i]);
92
- else j++;
93
- }
94
- }
95
- ```

1

文法の修正

2020/04/30 10:19

投稿

L4zy
L4zy

スコア18

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,88 @@
1
- if文が動きません。
1
+ 一番下のif文が動きません。
2
2
  どこが悪さしているのでしょうか?
3
3
 
4
4
  ```C
5
+ #include <stdio.h>
6
+ #include <string.h> // strtok, strlen, memset
7
+ #include <stdlib.h> // malloc
8
+ #include <ctype.h> // isdigit
9
+ #include <stdlib.h> // atoi
10
+
11
+ int spacePart(char str[], char **num, int cnt);
12
+ int numCheck(char *num[], int numCnt);
13
+ void hashInsert(char *num[], int *hashArray[][7], int numCnt);
14
+ // ハッシュ探索を行う関数 引数:なし 戻り値:0
15
+ int main()
16
+ {
17
+ int flg = 0, numCnt, find, *hashArray[100][7] = {};
18
+ char str[1000], *num[100];
19
+ // メモリ確保
20
+ *num = (char *)malloc(sizeof(str));
21
+
22
+ while(flg == 0)
23
+ {
24
+ puts("100個以内の数値を入力してください。");
25
+ fgets(str, 1000, stdin);
26
+
27
+ // 文字列を空白ごと分け、入力値の数を代入する
28
+ numCnt = spacePart(str, num, 100);
29
+
30
+ // 入力値が数値だったら
31
+ if(numCheck(num, numCnt) == 1) flg = 1;
32
+ else puts("入力値が正しくありません。");
33
+ }
34
+ // ハッシュ値に数値を代入する
35
+ hashInsert(num, hashArray, numCnt);
36
+
37
+
38
+ //ここでなーい
39
+ printf("%d %d\n", hashArray[0][1], hashArray[0][2]);
40
+
41
+
42
+ printf("探索対象の数値を入力してください:");
43
+ scanf("%d", find);
44
+ return 0;
45
+ }
46
+
47
+ // 文字列を空白ごとに分けて配列に格納し、入力値の数を返す関数
48
+ // 引数:入力値、配列、100 戻り値:数値の数
49
+ int spacePart(char str[], char **num, int cnt)
50
+ {
51
+ // 空白区切りに文字列を分割
52
+ num[0] = strtok(str, " \n");
53
+ int i;
54
+
55
+ // 最大100個
56
+ for(i = 1; i < cnt; i++)
57
+ {
58
+ num[i] = strtok(NULL, " \n");
59
+ // 区切った文字列がNULLだったら
60
+ if(num[i] == NULL) break;
61
+ }
62
+ num[i] = NULL; // 終わりのしるし
63
+ free(num); // メモリ解放
64
+ return i;
65
+ }
66
+
67
+ // 入力文字列が数値がチェックする関数 引数:入力値 戻り値:数値1 数値ではない0
68
+ int numCheck(char *num[], int numCnt)
69
+ {
70
+ char *temp;
71
+ // 配列に値がある間
72
+ for(int i = 0; i < numCnt; i++)
73
+ {
74
+ temp = num[i];
75
+ for(int j = 0; j < strlen(temp); j++)
76
+ {
77
+ // 数値ではなかったら
78
+ if( !isdigit(temp[j]) ) return 0;
79
+ }
80
+ }
81
+ return 1;
82
+ }
83
+
84
+ // 入力した数値を7で割った余りの配列に代入する関数 
85
+ // 引数:入力値、ハッシュ配列、数値の数 戻り値:なし
5
86
  void hashInsert(char *num[], int *hashArray[][7], int numCnt)
6
87
  {
7
88
  int j = 0;