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を使用しています。
内容がわかりにくいかもしれませんが、よろしくお願いします。
linked list の件について
Re:linked list の件について
あっすいません。
これからは、気を付けます。
掲示板に書くのが初めてだったので。
以後気を付けます。
メールありがとうございます。
これからは、気を付けます。
掲示板に書くのが初めてだったので。
以後気を付けます。
メールありがとうございます。
Re:linked list の件について
さて、直そうにも、全部書き直した方が、早そうな・・・
読み込んだ、データのノードは先頭に追加したいのか、最後尾に追加
したいのか。どっちでしょ?
一番最初の
member = (struct card*)malloc(sizeof(struct card));
は何をしたいのでしょうか。番兵ですか?
表示を、whileやforで回さなきゃ、1つしか出力されないのは当たり前ですよね。
もちろん、リンクがうまくいってないから、でないけど。
読み込んだ、データのノードは先頭に追加したいのか、最後尾に追加
したいのか。どっちでしょ?
一番最初の
member = (struct card*)malloc(sizeof(struct card));
は何をしたいのでしょうか。番兵ですか?
表示を、whileやforで回さなきゃ、1つしか出力されないのは当たり前ですよね。
もちろん、リンクがうまくいってないから、でないけど。
Re:linked list の件について
メールありがとうございます。
データのノードは最後尾に追加したいです。
member = (struct card*)malloc(sizeof(struct card));
↑
は領域を確保しなければいけないのかと思いまして・・・。
whileとかでループさせるってことですか。
もし良ければで結構なんですが、
nonさんが作ったソースコードとか教えていただけませんか?
データのノードは最後尾に追加したいです。
member = (struct card*)malloc(sizeof(struct card));
↑
は領域を確保しなければいけないのかと思いまして・・・。
whileとかでループさせるってことですか。
もし良ければで結構なんですが、
nonさんが作ったソースコードとか教えていただけませんか?
Re:linked list の件について
#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をしてません。
年齢をはぶきました。
Re:linked list の件について
メールありがとうございます。
コンパイルして実行したら、できました!
本当にありがとうございました。
これからもわからない所が多々あると思いますので、
そのときはよろしくお願いします。
本当にありがとうございました。
コンパイルして実行したら、できました!
本当にありがとうございました。
これからもわからない所が多々あると思いますので、
そのときはよろしくお願いします。
本当にありがとうございました。