質問はコンパイルエラー(問題文の下にあります)の原因とその解決方法、二分探索木の構築の過程をprintf関数で表示する方法を教えてほしいです。
以下が問題です。
// 基本問題2 要素追加関数
// 引数: target_node ... 評価するノード
// 引数: add_node ... 追加しようとしているノード
// 返り値: 構造体へのポインタ
// 動作: target_node と add_node を比べて処理する
Node *addData(Node *target_node, Node *add_node){
addData.c はキーボードから氏名・電話番号を入力し,addData関数を使って二分探索木
を構築するプログラムである.更に,木を構築する際の過程をprintf関数などで表示する
ようにし,実行結果として示すようにせよ.
コンパイルエラー
adddata.c: 関数 ‘main’ 内:
adddata.c:44:72: エラー: 構造体または共用体ではない何かのメンバ ‘name’ の要求です
printf("名前を入力してください。\n"); scanf("%s", &p.name);
^
adddata.c:45:78: エラー: 構造体または共用体ではない何かのメンバ ‘cellnumb’ の要求です
printf("電話番号を入力してください。\n"); scanf("%s", &p.cellnumb);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUMBER 64
typedef struct node{
char name[NUMBER];
char cellnumb[NUMBER];
struct node *left;
struct node *right;
}Node;
Node *addData(Node *target_node, Node *add_node)
{
int n;
n = strcmp(target_node->name, add_node->name);
if(target_node == NULL){
Node *target_node = malloc(sizeof(Node));
strcpy(target_node->name, add_node->name);
strcpy(target_node->cellnumb, add_node->cellnumb);
target_node->left = NULL;
target_node->right = NULL;
}
else if(n > 0){
target_node->left = addData(target_node->left, add_node);
}
else if(n < 0){
target_node->right = addData(target_node->right, add_node);
}
}
int main(void)
{
int answer;
Node *root;
Node *p;
root = NULL;
do{
int answer;
printf("ノードを追加しますか?\n[Yes] ==> 1 [No] ==> 0"); scanf("%d",&answer);
if(answer == 1){
printf("名前を入力してください。\n"); scanf("%s", &p.name);
printf("電話番号を入力してください。\n"); scanf("%s", &p.cellnumb);
p->left = NULL;
p->right = NULL;
root = addData(root, p);
}
}while(answer == 1);
return 0;
}