電子書籍の厳選無料作品が豊富!

至急お願いします!
c言語についてです。このエラーをなくすにはどうすればいいでしょうか?
(の前に何かを入力する必要があるんでしょうか?
よろしくお願いします!


#include <stdio.h>
#include<string.h>
#include<stdlib.h>

#define FAILED -1

typedef struct NODE{
char name[20];//名前
char tellnumber[20];//電話番号
struct NODE *left;//左
struct NODE *right;//右
} NODE;

NODE add(NODE *p, char n[], char t[])
{
if (p == NULL){//NULLの時
p = (NODE *)malloc(sizeof(NODE));//メモリ確保
strcpy(p->name, n);//名前を格納.
strcpy(p->tellnumber, t);//電話番号を格納
p->left = p->right = NULL;
}
else if(strcmp(n,p->name) < 0)
(p->(*left))=add(p,n,t);//左へ.
else if(strcmp(n,p->name) > 0)
(p->(*right))=add(p,n,t);//右へ.
else printf("同姓同名のデータは登録できません。\n");

return *p;
}


エラー文
関数 ‘add内
23:9: エラー: expected identifier before ‘(’ token
(p->(*left))=add(p,n,t);//左へ.
^
25:9: エラー: expected identifier before ‘(’ token
(p->(*right))=add(p,n,t);//右へ.

質問者からの補足コメント

  • つらい・・・

    addの返す型を変えようとしてます。
    具体的には返す型と他の部分の修正はどのようにすればいいでしょうか?

    お願いします。考えましたがわかりません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/01/28 23:43
  • struct NODE *add(NODE *p, char n[], char t[])
    {
    if (p == NULL){//NULLの時
    p = (NODE *)malloc(sizeof(NODE));//メモリ確保
    strcpy(p->name, n);//名前を格納.
    strcpy(p->tellnumber, t);//電話番号を格納
    p->left = p->right = NULL;
    }

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/01/28 23:57
  • else if(strcmp(n,p->name)<0)
    (p->left)=add(p->left,n,t); //左へ
    else if(strcmp(n,p->name)>0)
    (p->right)=add(p->right,n,t); //右へ
    else printf("同姓同名のデータは登録できません。\n");
    return p;
    }
    こんな感じで変更してみたら一応コンパイルは出来たのですがいいんですかね?

      補足日時:2020/01/28 23:58

A 回答 (4件)

ほぼ OK. ただ, malloc が NULL を返す可能性とか, n や t に入っているものが長すぎたときのことも考える必要がある.



あと細かいところだと
英語では「電話」は telephone だから tellnumber はスペルが変だし, 略すときも phone の方がむしろ普通
というところも気をつけた方がいい... かな.
    • good
    • 0
この回答へのお礼

貴重なお時間を割いて教えていただきありがとうございました

お礼日時:2020/01/29 02:23

何をどう考えてどこで困っている?

この回答への補足あり
    • good
    • 0

泣くほど苦労したいなら add の返す型は変えなくてもいいかもしれないけど, そこまで「ドM」でない人は変えるべきだと思う.



で変えるなら当然「関数 add の返す型」は変更しないとダメだけど, それだけでもないからね. add の返す型だけ変更して他の部分に一切手を付けなかったら依然としてエラーは出続けるよ.
この回答への補足あり
    • good
    • 0

「エラーをなくす」だけなら, その文を消せばいいね.



本質的には
関数 add の返す型
がまちがっている.
    • good
    • 0
この回答へのお礼

解答ありがとうございます!
この文を消さずにプログラムを完成させたいんですが、その場合は関数addの返す型を変更すればよいでしょうか?

お礼日時:2020/01/28 21:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!