自己参照的構造体の使い方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かいん

自己参照的構造体の使い方

#1

投稿記事 by かいん » 9年前

自己参照的構造体を使用して入力した番号に当てはまるデータを出力するというプログラムを作成しています。条件として20行目のfor文を必ず使うことなんですが、20行目のfirstがどのような役回りをしているのか、22,27行目のデータを出力と24行目のif文でdata.no、data.nameにするとエラー文が出てくるのでどのようにすれば出力されるかが分かりません。
改善策を教えてください。

text.txtの内容
1 saisuke
2 yamada
3 ueda
7 nakashio
4 sahashi

コード:

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

struct hito{
	int no;
	char name[40];
	struct hito *next;
};

void list(int num){
	int i;
	FILE *fp;
	struct hito *data;

	if ((fp = fopen("text.txt", "r")) == NULL){
		printf("not open file\n");
		exit(EXIT_SUCCESS);
	}

	for (data = first; data != NULL; data = data->next){
		//全てのデータを出力する
		printf("%d %s", data, data);
	}
	if (data.no == num){
		//検索したデータを出力する
		printf("検索したデータ\n");
		printf("%d\t%d\t%s", data, data, data);
	}
	fclose(fp);
}

int main(void){

	int num;
	printf("inout_number\n");
	scanf("%d", &num);

	list(num);

	return 0;
}

box
記事: 2002
登録日時: 14年前

Re: 自己参照的構造体の使い方

#2

投稿記事 by box » 9年前

かいん さんが書きました:自己参照的構造体を使用して
とありますが、自己参照型構造体による線形リストを構築しているようすが見当たりません。
かいん さんが書きました: 20行目のfirstがどのような役回りをしているのか
上述の線形リストの先頭を指すポインターでありましょう。ま、firstを定義せずにいるので、コンパイルが通らないはずですが。
かいん さんが書きました: 22,27行目のデータを出力と24行目のif文でdata.no、data.nameにするとエラー文が出てくる
何をしたとき(コンパイル時?実行時?)にどんなエラーが出るのかを正確に教えてください。
単に「エラーが出る」だけだと、いかんともしがたいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 自己参照的構造体の使い方

#3

投稿記事 by みけCAT » 9年前

かいん さんが書きました:22,27行目のデータを出力と24行目のif文でdata.no、data.nameにするとエラー文が出てくるのでどのようにすれば出力されるかが分かりません。
dataはポインタであって構造体ではないので、メンバを持ちません。
ポインタが指す先の構造体のメンバにアクセスするには、data->noまたは(*data).noのように書きます。(data->nextは使われていますよね?)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る