【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22102

構造体
投稿者---neko(2005/07/25 12:59:58)


このサイトの15-4-1の問題を元に自分なりに作成途中ですが、
list[i]に変な値が入ります。色々と考えましたが分かりません。
なぜでしょうか?
お忙しいところお手数ですが、よろしくお願いします。

#include<stdio.h>

struct kenko {
    char name[20];
    double taju;
    double sintyo;
};

int main(void) 
{
    struct kenko list[20];
    int i = 0;
    
    printf("氏名、体重、身長を入力。(終了条件:Ctrl+Z)\n");
    while(scanf("%s %lf %lf ", list[i].name, &list[i].taju, &list[i].sintyo) != EOF) {
        i++;
    }
    for (i = 0; i < 20; i++) {
        printf("%s ", list[i].name);
        printf("%f ", list[i].taju);
        printf("%f", list[i].sintyo);
        printf("\n");
    }
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体 22103 Blue 2005/07/25 13:10:53


No.22103

Re:構造体
投稿者---Blue(2005/07/25 13:10:53)


20個全部に値を入れないと、初期値の値のまま表示されます。
>for (i = 0; i < 20; i++) {

それと
>    while(scanf("%s %lf %lf ", list[i].name, &list[i].taju, >&list[i].sintyo) != EOF) {
>        i++;
>    }
のままですと、20個以上のデータが入れれます。
ですので、変数をもう一つ用意して

int i = 0, j = 0; printf("氏名、体重、身長を入力。(終了条件:Ctrl+Z)\n"); while(scanf("%s %lf %lf ", list[i].name, &list[i].taju, &list[i].sintyo) != EOF) { i++; if ( i == 20 ) break; /* list[ 20 ]の領域は用意していない */ } /* 入力したデータまで表示 */ for ( j = 0; j < i; j++ ) {
のようにするとよいでしょう。



この投稿にコメントする

削除パスワード

No.22106

Re:構造体
投稿者---neko(2005/07/25 13:48:27)


色付きでありがとうございます。
分かりやすいです。

>20個全部に値を入れないと、初期値の値のまま表示されます。

なるほどです。

>20個以上のデータが入れれます。
>ですので、変数をもう一つ用意して

それも良く分かりました。

お蔭様で出来ました。

#include<stdio.h>

struct kenko {
    char name[20];
    double taju;
    double sintyo;
};

int main(void) 
{
    struct kenko list[20];
    int i = 0, j = 0;
    
    printf("氏名、体重、身長を入力。(終了条件:Ctrl+Z)\n");
    while(scanf("%s %lf %lf ", list[i].name, &list[i].taju, &list[i].sintyo) != EOF) {
        i++;
        if ( i == 20)break;
    }
    for (j = 0; j < i; j++) {
        putchar('\n');
        printf("%s ", list[j].name);
        printf("%f ", list[j].taju);
        printf("%f", list[j].sintyo);
        printf("\n");
    }
}



結果
氏名、体重、身長を入力。(終了条件:Ctrl+Z)
a 172.0 53.0
b 152.6 34.6
a 172.000000 53.000000

b 152.600000 34.600000


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧