実現したいこと
2文探索木を用いた電話帳検索システムの二分探索木にデータを挿入する関数を作成したいです。
前提
キーボードでデータを入力して二分探索木にデータを挿入する関数を作成したいのですが、キーボードから文字列を読み取って構造体のメンバに格納するという意図で書いた部分の以下のコンパイルエラーの原因と解決方法が分かりません。
発生している問題・エラーメッセージ
エラー: 構造体または共用体ではない何かのメンバ ‘name’ の要求です printf("名前を入力してください。\n"); scanf("%s", p.name); エラー: 構造体または共用体ではない何かのメンバ ‘cellnumb’ の要求です printf("電話番号を入力してください。\n"); scanf("%s", p.cellnumb);
該当のソースコード
c言語
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#define NUMBER 64 5 6typedef struct node{ 7 char name[NUMBER]; 8 char cellnumb[NUMBER]; 9 struct node *left; 10 struct node *right; 11}Node; 12 13Node *addData(Node *target_node, Node *add_node) 14{ 15 int n; 16 n = strcmp(target_node->name, add_node->name); 17 if(target_node == NULL){ 18 Node *target_node = malloc(sizeof(Node)); 19 strcpy(target_node->name, add_node->name); 20 strcpy(target_node->cellnumb, add_node->cellnumb); 21 target_node->left = NULL; 22 target_node->right = NULL; 23 } 24 else if(n > 0){ 25 target_node->left = addData(target_node->left, add_node); 26 } 27 else if(n < 0){ 28 target_node->right = addData(target_node->right, add_node); 29 } 30 31} 32 33int main(void) 34{ 35 int answer; 36 Node *root; 37 Node *p; 38 char a,b; 39 40 root = NULL; 41 do{ 42 int answer; 43 printf("ノードを追加しますか?\n[Yes] ==> 1 [No] ==> 0"); scanf("%d",&answer); 44 if(answer == 1){ 45 printf("名前を入力してください。\n"); scanf("%s", p.name); 46 printf("電話番号を入力してください。\n"); scanf("%s", p.cellnumb); 47 p->left = NULL; 48 p->right = NULL; 49 root = addData(root, p); 50 } 51 }while(answer == 1); 52 53 return 0; 54} 55
###修正版ソースコード
c言語
1 2#include <stdio.h> 3#include <string.h> 4#include <stdlib.h> 5#define NUMBER 10000 6 7typedef struct node{ 8 char name[NUMBER]; 9 char cellnumb[NUMBER]; 10 struct node *left; 11 struct node *right; 12}Node; 13 14Node *addData(Node *target_node, Node *add_node) 15{ 16 int n; 17 n = strcmp(target_node->name, add_node->name); 18 if(target_node == NULL){ 19 Node *target_node = malloc(sizeof(Node)); 20 strcpy(target_node->name, add_node->name); 21 strcpy(target_node->cellnumb, add_node->cellnumb); 22 target_node->left = NULL; 23 target_node->right = NULL; 24 printf("%s", target_node->name); 25 } 26 else if(n > 0){ 27 target_node->left = addData(target_node->left, add_node); 28 } 29 else if(n < 0){ 30 target_node->right = addData(target_node->right, add_node); 31 } 32 else if(n = 0) 33 printf("同姓同名の人が居ます。\n"); 34 return target_node; 35} 36 37 38int main(void) 39{ 40 int answer; 41 Node *root; 42 Node *p; 43 44 root = NULL; 45 do{ 46 int answer; 47 printf("ノードを追加しますか?\n[Yes] ==> 1 [No] ==> 0\n"); scanf("%d",&answer); 48 if(answer == 1){ 49 printf("名前を入力してください。\n"); scanf("%s", p->name); 50 printf("電話番号を入力してください。\n"); scanf("%s", p->cellnumb); 51 p->left = NULL; 52 p->right = NULL; 53 root = addData(root, p); 54 } 55 }while(answer == 1); 56 57 return 0; 58} 59
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/22 14:11 編集