candlefireのプロフィール
- ベストアンサー数
- 0
- ベストアンサー率
- 0%
- お礼率
- 70%
- 登録日2005/06/04
- プログラムのトレース
プログラムのトレース 参考書を読んでいて、どうしてもわからないところがあります。 自己参照構造体の利用というところなのですが、次のプログラムです。 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct person { char name[30]; int age; struct person *next; } Person; int main(void) { Person dmy = {"", 0, NULL}; Person *start = &dmy; Person *wkdtp; Person *ip; char name[30], age_ss[10]; while(1){ /* キーボードからデータを入力する */ printf("名前="); gets(name); if(strcmp(name, "") == 0) break; printf("年齢="); gets(age_ss); /* 構造体1個分のメモリを確保する */ wkdtp = (Person *)malloc(sizeof(Person)); if(wkdtp == NULL){ printf("メモリ確保できません。\n"); exit(1); } /* 確保した構造体に名前と年齢を設定する */ strcpy(wkdtp->name, name); wkdtp->age = atoi(age_ss); /* 作成した構造体wkdtpを既存のチェーンにはめ込んでいく */ for(ip=start; ip->next != NULL; ip = ip->next){ if(wkdtp->age < ip->next->age){ wkdtp->next = ip->next; ip->next = wkdtp; break; } } /* 最高齢だったらチェーンの最後につなぐ */ if(ip->next == NULL){ ip->next = wkdtp; wkdtp->next = NULL; } } /* チェーンをたどって構造体の内容を表示する */ for(ip = start->next; ip != NULL; ip = ip->next){ printf("%s %d\n", ip->name, ip->age); } return 0; } /* 作成した構造体wkdtpを既存のチェーンにはめ込んでいく */ の次のforループの最初のところでつまづいてしまいます。 ip=start でipにstartを代入していますが、このstartの中身って、dmyすなわち{"", 0, NULL}ではないですか。forループの継続条件が、ip->nextがNULLでないことですから、ループの開始時点でループの中の文を実行せずに抜けてしまうのではないでしょうか。「これは何かの間違いだ」と思い、打ち込んでコンパイル・リンク・実行してみると、参考書の通りに、 名前=田中一郎←入力する 年齢=20 名前=伊藤二郎 年齢=40 名前=鈴木三郎 年齢=10 名前=内田四郎 年齢=30 名前=[enter]←[enter]だけ押下で入力終了 鈴木三郎 10←年齢順になっている 田中一郎 20 内田四郎 30 伊藤二郎 40 と、動きました。済みません、すごく初歩的なことで悩んでいると思いますが、私の理解のどこが間違っているのでしょうか。どなたか解説をお願い致します。
- fopenについて
ご質問させて頂きます。 ファイルの中身は以下の通りです。 TX55123455846521113456211415122335122200452125442[EOF] という感じの 一行だけの細長いデータです。 このファイルのデータを 読み取ろうとして 以下の様にしました。 int main(void){ char buf[5]; FILE *fp; fp = fopen("ex.fil","r"); if (fp == NULL){ printf("can't open"); exit(1); } エラーは出ないのですが データがないと判断されてしまうようで 「can't open」 となってしまいます。 どういう点がおかしいのか お気づきな点がありましたら ご教示して頂けたら幸いです。
- SafariでPDF
SafariでPDFのリンクをクリックすると、以前は画面内でプレビューが動いてみれたのですが、 最近クリックすると、アプリケーション選択画面がでて、Adobeリーダを選ぶという操作が必要になってしまいました。 しかもプレビューが選択できません。 これはどうすれば以前の状態に戻せるのでしょうか。 きっかけがAdobeを入れたときかどうかは分かりませんが、最近入れたことはたしかです。 使用環境 Mac OS 10.4.6 Safari 2.0.3 PDF browser Pluginがインストール済み
- PSP、DSのインターネットで
PSPかDSLite(発売後に)のどちらを 購入しようか迷っています。 ゲームはオマケと考えてます。 多分、外ではやらないし家ではPS2で充分です。 で気になるのがインターネット出来るのでしょうか? 出来るなら、すぐ買いたいです。 ザウルスみたいの欲しいのですが、高くて 買えません。PSPとDSのインターネットに ついて詳しい方、教えて下さい。
- macのトラブルについて
こんばんは。最近、某プロバイダーのオークションに参加、出品等の際に文章作成をしていると、決まって、文字化けし、その後で異なるサイトにアクセスしようとすると、勝手にダウンロードマネージャーが起動し、そのままページ更新ができなくなってしまいます。 ウィルスかと思ってpcをリカバリーしてみても、状況がかわりません。 こういう場合、どのような原因が考えられるのでしょうか?
- 締切済み
- ネットワーク
- momo0731pa
- 回答数2