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

質問編集履歴

1

コードを全文載せました

2021/06/10 08:04

投稿

zigzagsv
zigzagsv

スコア1

title CHANGED
File without changes
body CHANGED
@@ -7,17 +7,140 @@
7
7
 
8
8
  ### 該当のソースコード
9
9
 
10
+ #include <stdio.h>
11
+ #include <string.h>
12
+ #include <stdlib.h>
13
+
14
+ struct TelephoneBook{
15
+ char name[16];
16
+ char number[16];
17
+ struct TelephoneBook *next;
18
+ };
19
+
20
+ struct TelephoneBook *add_book(char *name, char *number,struct TelephoneBook *head);
21
+ void print_book(struct TelephoneBook *p);
22
+ void free_book(struct TelephoneBook *p);
23
+ int check_name(char *na);
24
+ int check_number(char *num);
25
+
26
+ int main(void){
27
+ struct TelephoneBook *head;
28
+ char name_number[33];
29
+ char name[16]; //入力した名前を格納する
30
+ char number[16]; //入力した電話番号を格納する
31
+ int check_na; //仕様通りに入力されてなければ1,\qが入力されていれば2が代入される
32
+ int check_nu; //仕様通りに入力されてなければ1が代入される
33
+ head = NULL;
34
+
35
+ while(1){
36
+ printf("input>");
37
+ fgets(name_number,33,stdin);
38
+ sscanf(name_number,"%s %s", name, number);
39
+ check_na = check_name(name);
40
+ if(check_na == 2){
41
+ print_book(head);
42
+ free_book(head);
43
+ return EXIT_SUCCESS;
44
+ }
45
+ if (check_na == 1){
46
+ printf("error");
47
+ return EXIT_FAILURE;
48
+ }
49
+ check_nu = check_number(number);
50
+ if (check_nu == 1){
51
+ printf("error");
52
+ return EXIT_FAILURE;
53
+ }
54
+ if(check_na == 0 && check_nu == 0){
55
+ printf("Ok\n");
56
+ }
57
+ head = add_book(name,number,head);
58
+ }
59
+ }
60
+
61
+ int check_name(char *na){
62
+ char name[16] = " ";
63
+ strcpy(name, na);
64
+ char *chr1 = "\q";
65
+ char *chr2 = "\Q";
66
+ if(strcmp(name,chr1) == 0 || strcmp(name,chr2) == 0){
67
+ return 2;
68
+ }
69
+ int len = strlen(name);
70
+ if(name[0] >= 'A' && name[0] <= 'Z'){
71
+
72
+ }else{
73
+ return 1;
74
+ }
75
+ for(int i = 1; i <= len; i++){
76
+ if(name[i] >= 'a' || name[i] <= 'z'){
77
+
78
+ }else{
79
+ return 1;
80
+ }
81
+ }
82
+ return 0;
83
+ }
84
+
85
+ int check_number(char *num){
86
+ char number[16];
87
+ strcpy(number, num);
88
+ for(int i = 0; i <= 2; i++){
89
+ if(number[i] >= '0' && number[i] <= '9'){
90
+
91
+ }else{
92
+ return 1;
93
+ }
94
+ }
95
+ for(int i = 4; i <= 7; i++){
96
+ if(number[i] >= '0' && number[i] <= '9'){
97
+
98
+ }else{
99
+ return 1;
100
+ }
101
+ }
102
+ for(int i = 9; i <= 12; i++){
103
+ if(number[i] >= '0' && number[i] <= '9'){
104
+
105
+ }else{
106
+ return 1;
107
+ }
108
+ }
109
+ if(number[3] != '-' || number[8] != '-'){
110
+ return 1;
111
+ }
112
+ return 0;
113
+
114
+ }
115
+
10
116
  struct TelephoneBook *add_book(char *name, char *number,struct TelephoneBook *head){
11
- struct TelephoneBook *p;
117
+ struct TelephoneBook *p = head;
118
+ while ( p->next != NULL ) {
119
+ p = p->next;
120
+ }
12
121
  p = (struct TelephoneBook *) malloc(sizeof(struct TelephoneBook));
13
122
  strcpy(p->name, name);
14
123
  strcpy(p->number, number);
15
124
  p->next = head;
16
125
  head = p;
17
-
18
126
  return head;
19
127
  }
20
128
 
129
+ void print_book(struct TelephoneBook *p){
130
+ while (p != NULL) {
131
+ printf("%s : %s\n", p->name, p->number);
132
+ p = p->next;
133
+ }
134
+ }
135
+
136
+ void free_book(struct TelephoneBook *p){
137
+ struct TelephoneBook *p2;
138
+ while (p != NULL) { /* 次ポインタがNULLまで処理 */
139
+ p2 = p->next;
140
+ free(p);
141
+ p = p2;
142
+ }
143
+ }
21
144
  ### 試したこと
22
145
  p->next = head;
23
146
  head = p;