プログラミング初心者です。
C言語の課題で調べながらやっているのですが、エラーが続き泣きそうです。
ヒントだけでも頂けると非常に助かります。
【 課題文 】 :
自己参照構造体を使って単語を登録するプログラムを作りましょう.forを使った繰返しの中でfgetsを使って単語を入力します.Control-Dキーが入力されたら繰返しから抜け出し,登録した単語を順番に表示します.あらかじめ繰返しの数が分かっていないので,動的にメモリを確保する必要があります.Control-D が入力されると,fgets はファイル(標準入力) が終りになったと判断し,NULLポインタを返すので,それによって入力の終了をプログラム中で検出できます.
1行入力のために用意するchar 型の配列の大きさは、マクロで定義し、1024としてください。1行入力はfgetsを用い、行末の改行文字(\n)は、strchr()を用いて検出し、取り除いてから処理するようしてください。また、自己参照構造体は、以下のようにしてください。
struct list { struct list *next; char *name; };
control-dの検出は、fgets()の返値をNULLと比較して行ってください。
char *p; ... for(;;){ p = fgets(.....); if(p == NULL){ break; } ... }
プログラムを動作させ、キーボードから何行か入力して最後にcontrol-d(CTRL-D, ^D)を入力すると、以下のように入力された文字列がそのまま入力した行の順番に表示されるようにしなければならないようです。
%./kadai ABC 123 XYZ ^D ABC 123 XYZ %
【 現状 】 :
#include <stdio.h> #include <string.h> #include <stdlib.h> //1行入力のために用意するchar型の配列の大きさはマクロで定義し1024 #define MAXLINE 1024 //自己参照構造体を定義 struct list { struct list *next; char *name; }; int main(){ char input[MAXLINE]; //構造体型のポインタ char *p, *start; //forを使った繰返しの中でfgetsを使って単語を入力 for(;;){ p = fgets(input,MAXLINE,stdin); //pがNULLの時、入力の終了 if(p == NULL){ break; } p = strchr(input,'\n'); if(p != NULL){ //1回目のループ -- 先頭の構造体を生成 p = malloc(sizeof(struct list)); start = p; }else{ //2回目以降 -- 構造体へのポインタを next に保存 p -> next = malloc(sizeof(struct list)); p = p -> next; p->next = NULL; printf("input=%s",input); } exit(0); } }
エラー
?「char」が構造または結合ではないのようなことが書いてあるが、どう改善したら良いか分からない。
? 構造体をつなげる部分をどうすれば良いのかよく分からない。
05.c:38:9: error: member reference base type 'char' is not a structure or union p -> next = malloc(sizeof(struct list)); ~ ^ ~~~~ 05.c:39:13: error: member reference base type 'char' is not a structure or union p = p -> next; ~ ^ ~~~~ 05.c:40:8: error: member reference base type 'char' is not a structure or union p->next = NULL; ~^ ~~~~ 3 errors generated.
よく分からないコードになってしまっているかと思いますが、
どうか温かい目でご教授お願い致します。
回答2件
あなたの回答
tips
プレビュー