linked list の件について

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

linked list の件について

#1

投稿記事 by toshi » 16年前

C言語を勉強して、時間が経っていなく分からない所があるので教えてください。
僕は今singly linked list を使ってstruct構造体を使ったポインタ形式のC言語のプログラミングを作っています。以下にソースコードを示します。

#include "stdafx.h"
#include "stdlib.h"

struct card {
char name[20];
int age;
struct card *next;
};



int _tmain(int argc,_TCHAR* argv[/url]){
struct card *member;
member = (struct card*)malloc(sizeof(struct card));
struct card *head,*current;
int a;



while(printf("入力しますか?\n続けつる場合は1、辞める場合はCtrl+Z\n"),scanf("%d",&a) !=EOF){
head=(struct card *)malloc(sizeof(struct card));
head->next=NULL;
printf("名前と年齢を入力してください\n");
scanf("%s%d",head->name,&head->age);
head->next=NULL;


if(head->next!=NULL)
head = head->next;
head->next=(struct card*)malloc(sizeof(struct card));

}

printf("名前:%s\n",head->name);
printf("年齢:%d\n",head->age);

return 0;

}

目指しているのは、名前と年齢を無限に打ち込み、Ctrl+Zを入力するとプログラムが終了して今までに打ってきた名前と年齢が表示されるというプログラミングを組みたいんですが、コンパイルして実行すると最後に入力した名前と年齢しか表示されません。
どのようなソースソースコードにすればいいのか教えていただけませんか?
*currentを使うのかもしれませんが、さっぱり分かりません。
僕はVisual Studio 2008を使用しています。
内容がわかりにくいかもしれませんが、よろしくお願いします。

lbfuvab

Re:linked list の件について

#2

投稿記事 by lbfuvab » 16年前

せめて字下げぐらいきちんとしてください。

toshi

Re:linked list の件について

#3

投稿記事 by toshi » 16年前

あっすいません。
これからは、気を付けます。
掲示板に書くのが初めてだったので。
以後気を付けます。
メールありがとうございます。

non

Re:linked list の件について

#4

投稿記事 by non » 16年前

さて、直そうにも、全部書き直した方が、早そうな・・・
読み込んだ、データのノードは先頭に追加したいのか、最後尾に追加
したいのか。どっちでしょ?
一番最初の
member = (struct card*)malloc(sizeof(struct card));
は何をしたいのでしょうか。番兵ですか?
表示を、whileやforで回さなきゃ、1つしか出力されないのは当たり前ですよね。
もちろん、リンクがうまくいってないから、でないけど。

toshi

Re:linked list の件について

#5

投稿記事 by toshi » 16年前

メールありがとうございます。
データのノードは最後尾に追加したいです。
member = (struct card*)malloc(sizeof(struct card));

は領域を確保しなければいけないのかと思いまして・・・。
whileとかでループさせるってことですか。
もし良ければで結構なんですが、
nonさんが作ったソースコードとか教えていただけませんか?

non

Re:linked list の件について

#6

投稿記事 by non » 16年前

#include "stdio.h" 
#include "stdlib.h" 

struct card { 
	char name[20]; 
	struct card *next; 
}; 

int main(void)
{ 
	struct card *head,*current,*p; 
	int a; 
	head=NULL;
	while(printf("入力しますか?\n続ける場合は1、辞める場合はCtrl+Z\n"),scanf("%d",&a) !=EOF){ 
		current=(struct card *)malloc(sizeof(struct card)); 
		current->next=NULL; 
		printf("名前を入力してください\n"); 
		scanf("%s",current->name);
		if(head==NULL)
			head=current;
		else{
			for(p=head;p->next!=NULL;p=p->next){}
			p->next=current;
		}
	} 
	for(p=head;p!=NULL;p=p->next)
		printf("名前:%s\n",p->name); 
 
	return 0; 
}
Cに変更しました。
エラー処理をしてません。
freeをしてません。
年齢をはぶきました。

toshi

Re:linked list の件について

#7

投稿記事 by toshi » 16年前

メールありがとうございます。
コンパイルして実行したら、できました!
本当にありがとうございました。
これからもわからない所が多々あると思いますので、
そのときはよろしくお願いします。
本当にありがとうございました。

閉鎖

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