リストを使って入力順に値を格納するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
po_po
記事: 38
登録日時: 10年前

リストを使って入力順に値を格納するプログラム

#1

投稿記事 by po_po » 9年前

リストを使って新しく入力された値を先頭に格納するプログラムなのですが、どのような仕組みで動いているのか全くわかりません。
どういう仕組みで動いているのか詳しく教えてくれるとありがたいです。

コード:

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

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

int main(void){
  struct list *head;
  struct list *dummy, *new, *prev, *current;

  dummy = (struct list *)malloc(sizeof(struct list));
  strcpy(dummy->name, "");
  dummy->age=0;
  dummy->next=NULL;
  head=dummy;

  while((new = (struct list *)malloc(sizeof(struct list)) )){
    printf("氏名と年齢をスペースで区切って入力してください\n");
    if(scanf("%s%d", new->name, &new->age)==EOF) break;
    current = head;
    prev = head;

  while( current!=NULL){
    prev = current;
    current = current->next;
  }
  new->next = current;
  prev->next = new;
  
  }
}

non
記事: 1097
登録日時: 14年前

Re: リストを使って入力順に値を格納するプログラム

#2

投稿記事 by non » 9年前

po_po さんが書きました:リストを使って新しく入力された値を先頭に格納するプログラムなのですが、
本当にリストの先頭に格納されていますか?確認はしましたか?
non

po_po
記事: 38
登録日時: 10年前

Re: リストを使って入力順に値を格納するプログラム

#3

投稿記事 by po_po » 9年前

すいません先頭ではなくheadの次に入力順に格納されていきます

non
記事: 1097
登録日時: 14年前

Re: リストを使って入力順に値を格納するプログラム

#4

投稿記事 by non » 9年前

最後尾だと思うのですが?
non

po_po
記事: 38
登録日時: 10年前

Re: リストを使って入力順に値を格納するプログラム

#5

投稿記事 by po_po » 9年前

勘違いしていました。
headの次に1番目に入力したデータ、その次に2番目に入力したデータ・・・といった風に格納されていきます。
プログラムで下の部分が何をしているのかがわかりません

コード:

current = head;
    prev = head;
 
  while( current!=NULL){
    prev = current;
    current = current->next;

non
記事: 1097
登録日時: 14年前

Re: リストを使って入力順に値を格納するプログラム

#6

投稿記事 by non » 9年前

リストの課題では絵を必ず描いて下さい。
4行目でcuurentはNULLになります。
prevはcurrentを後追い(5行目)してますから、NULLの前、つまり最後尾のノードを指します。
non

po_po
記事: 38
登録日時: 10年前

Re: リストを使って入力順に値を格納するプログラム

#7

投稿記事 by po_po » 9年前

1行目と2行目でcurrentとprevにheadを代入しているのでcurrentとprevには毎ループごとにNULLが入るのですか?

コード:

current = head;
    prev = head;
 
  while( current!=NULL){
    prev = current;
    current = current->next;

non
記事: 1097
登録日時: 14年前

Re: リストを使って入力順に値を格納するプログラム

#8

投稿記事 by non » 9年前

po_po さんが書きました:1行目と2行目でcurrentとprevにheadを代入しているのでcurrentとprevには毎ループごとにNULLが入るのですか?
ちょっと意味がわからないです。少なくとも、prevがNULLになることはありません。
手書きできたないですが、絵を添付します。
添付ファイル
リスト.pdf
(42.38 KiB) ダウンロード数: 155 回
non

po_po
記事: 38
登録日時: 10年前

Re: リストを使って入力順に値を格納するプログラム

#9

投稿記事 by po_po » 9年前

やっと理解できました。
わざわざ絵まで書いてもらってありがとうございます。

閉鎖

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