今日は学校からC言語の課題を出されたのですが・・・どうやってもうまくいきません。
C言語の課題の内容は連結リストを手入力で数値を入力して0を入力するまで入力し続けて、入力した順番から表示させるのですが。
「変数宣言」と「TO DOここに必要な処理を記述する」以外は変えてはいけない。
表示するループで最初に入力した数値を参照してポインタから次入力した数値につなげるようにするようにする。
最後入力したデータにNULLを入れるようにする。
下のソースが課題で貰ったソースを自分なりに作ったソースです
必要に応じて作った変数は
int型は「i」で、struct nodeは [*tow]です。
メモリをmallocで「starat」と「tow」の2つ作って
「start」を入力した後に「tow」を参照できるように最初に[tow]のメモリを作った後にstartを作れるようにして。
次に、最初に参照するstartをif文で囲って最初に参照するためだけなのでという条件にして[i++]をしてその後はif文を無視するようにしてtowだけで入力するようにしたのですが、実行すると最初に入力した数値が2回表示されて終わってします。
どうすれば入力した順に表示できるようにループを回らせるプログラムができるでしょうか・・・?
わがままな事を言いますが、できればこの形を残したままでできるようにしたいです・・・
C言語の知識はまだ約半年で、9月終わりごろに教科書として使っていたC言語の本を終わらせたばかりです。
よろしくお願いしますm( )m
#include <stdio.h>
#include <stdlib.h>
/* 構造体の宣言 */
struct node
{
int data;
struct node *next;
};
int main(void)
{
/* 変数宣言(必要に応じて増やす) */
struct node *start, *p, *tow;
int d, i = 0;
/* リスト初期化 */
start = NULL;
/* データ入力 */
printf("input Number : ");
scanf("%d", &d);
/* リスト作成 */
while(d> 0)
{
/* TO DO ここに必要な処理を記述する */
tow = malloc(sizeof(struct node));
if(i==0)
{
start = malloc(sizeof(struct node));
start->data = d;
start->next = tow;
i++;
}
tow->data = d;
tow->next = NULL;
/* ここまで */
/* データ入力 */
printf("Input Number : ");
scanf("%d", &d);
}
/* 出力 */
printf("Result : ");
for(p=start; p!=NULL; p=p->next)
{
printf("%d ", p->data);
}
printf("\n");
return 0;
}