掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板2

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

No.25405

構造体2
投稿者---mine(2006/01/15 21:37:06)


名前(char)、身長(double)、体重(double),視力(視力構造体),
これらのデータをメンバとする構造体を定義し、入力と表示を行うプログラムです。
出力幅は名前が19文字、そのほかは5文字で、身長、体重は下一桁、視力は下三桁まで表示です。
下のプログラムを実行すると
********Name***********Hi*****We***(L) Eye (R)**
aadkr 1.312028565451403477000000000000000000000e+292 0.0 0.000 0
.000
1.739721275672613807000000000000000000000e+292 5.02866292360
2221824000000000000000000000e+291 0.000 0.000
 0.0 0.0 0.000 0.000
pラ@ 0.0 0.0 0.000 0.000
ZK@ 0.0 +NAN 0.000 0.000

********Name***********Hi*****We***(L) Eye (R)**
aadkr 1.312028565451403477000000000000000000000e+292 0.0 0.000 0
.000
1.739721275672613807000000000000000000000e+292 5.02866292360
2221824000000000000000000000e+291 0.000 0.000
 0.0 0.0 0.000 0.000
pラ@ 0.0 0.0 0.000 0.000
ZK@ 0.0 +NAN 0.000 0.000

と、なってしまいます。

正しくは、
*****Name******Hi*****We***(L) Eye (R)***
mine 90.0 35.5 1.500 1.500
mine 100.0 60.0 2.000 2.000

となります。

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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256

typedef struct eyesight
{
    double eye1;
    double eye2;
}Physical;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

void input_data(Person *);

void display_data(Person *,int,int);

int main(void)
{
    int cnt;
    Person member[DATA_MAX];

    input_data(member);

    display_data(member,DATA_MAX,cnt);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt)
{

    if(cnt >= 1)
    {
        printf("********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%-*s %-5.1f %-5.1f %-5.3f %-5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
(dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
(dmem+cnt)->home.eye2);
        }
    }
    else
    {
        printf("\nInput data is nothing!\n");
    }

    printf("\n");
    return;

}
void input_data(Person *pmem)
{
    int cnt;
    char buf[BUF];

    for(cnt = 0 ; cnt < DATA_MAX ; cnt++)
    {
        while(1)
        {
            printf("Name   : ");
scanf("%s",&buf[cnt]);

            if(strlen(&buf[0]) <= NAME_MAX)
            {
                strcpy(&pmem->name[0],&buf[0]);
                break;
            }
            printf("\nSorry. Input less than %d characters.\n\n",NAME_MAX+1);
            }
            if(buf[0] == 'E' && buf[1] =='N' && buf[2] == 'D' && buf[3] =='\0')
            {
               break;
            }

        printf("\nHeight : ");
        scanf("%d",&pmem[cnt].hei);

        printf("\nWeight : ");
        scanf("%d",&pmem[cnt].wei);

        printf("\nEye(L) : ");
        scanf("%d",&pmem[cnt].home.eye1);

        printf("\nEye(R) : ");
        scanf("%d",&pmem[cnt].home.eye2);
    }

    display_data(&pmem[0],DATA_MAX,cnt);

    return;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体2 25407 επιστημη 2006/01/15 21:39:07
<子記事> Re:構造体2 25408 επιστημη 2006/01/15 21:48:23


No.25407

Re:構造体2
投稿者---επιστημη(2006/01/15 21:39:07)


それで?



この投稿にコメントする

削除パスワード

No.25409

Re:構造体2
投稿者---mine(2006/01/15 21:49:18)


>それで?

重要な所を書き忘れてました。
すいません。

正しく表示をさせるためには、どの部分を
修正したらいいでしょうか?

よろしくお願いします。



この投稿にコメントする

削除パスワード

No.25408

Re:構造体2
投稿者---επιστημη(2006/01/15 21:48:23)


どこまで正しく、どこからオカシクなってるか、調べましたか?
それもせずにとにかく全文貼り付けて"誰か見つけて"はあまりに虫のいい話。

# つか、調べ方知ってる?



この投稿にコメントする

削除パスワード

No.25410

Re:構造体2
投稿者---mine(2006/01/15 21:57:34)


もちろん調べました。
けど、どこが違うのか分かんないんです。


この投稿にコメントする

削除パスワード

No.25411

Re:構造体2
投稿者---επιστημη(2006/01/15 22:06:58)


>もちろん調べました。

どうやって? コードとにらめっこするんじゃないよ!?
要所要所にprintfをばら撒いて、正しい値であるかを確認しましたか?

strcpy(&pmem->name[0],&buf[0]);
ここで pmem->name が正しい値とは思えません。
直前で
scanf("%s",&buf[cnt]); ←こんなことしてるから



この投稿にコメントする

削除パスワード

No.25413

Re:構造体2
投稿者---επιστημη(2006/01/15 22:39:36)


>strcpy(&pmem->name[0],&buf[0]);
>ここで pmem->name が正しい値とは思えません。

ぉぃぉぃ、pmem->name なわけないやん。
pmem[cnt].name じゃなきゃ。

その後に続く scanf もダメダメだし。
浮動小数点の入力になんで %d なのよ。




この投稿にコメントする

削除パスワード

No.25412

Re:構造体2
投稿者---fuku(2006/01/15 22:09:36)


No.25345より
[引用]
>無事にプログラムが正常に実行するようになりました。
[引用]

示されたソースを実行しただけでは?
今回の課題に全然活かされていません

おかしな文字が出てきているなら 変数が正しく格納されていない証拠
なら正しく格納できるようにするためだけに絞って
プログラムを作るべき
小さな事からコツコツしていって下さい



この投稿にコメントする

削除パスワード

No.25444

Re:構造体2
投稿者---mine(2006/01/17 17:38:57)


ENDが入力された時に、
入力を終了させたいのですが、
できません。

どのように、考えたらいいのでしょうか?
よろしくお願いします。


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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256

typedef struct eyesight
{
    double eye1;
    double eye2;
}Eyesight;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

void input_data(Person *);

void display_data(Person *,int,int);

int main(void)
{
int cnt;
    Person member[DATA_MAX];
for(cnt = 0 ; cnt < DATA_MAX ; cnt++)                 
    {
    input_data(&member[0]);
    }
    display_data(&member[0],DATA_MAX,cnt);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt)
{



        printf("\n********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%- *s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
                  (dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
                  (dmem+cnt)->home.eye2);
        }
    
    

    printf("\n");
    return ;

}
void input_data(Person *pmem)
{
    int cnt;
    char buf[BUF];

    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0')
        {
            break;
        }
        printf("Input data is nothing!\n");
        if(strlen(&buf[0])<=NAME_MAX)                      
        {
            strcpy(&pmem[0].name[0],&buf[0]);         
            break;                                         
        }
        printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1);



        printf("Height : ");
        scanf("%f",&pmem[0].hei);

        printf("Weight : ");
        scanf("%f",&pmem[0].wei);

        printf("Eye(L) : ");
        scanf("%f",&pmem[0].home.eye1);

        printf("   (R) : ");
        scanf("%f",&pmem[0].home.eye2);
    

 
    }

    return ;
}





この投稿にコメントする

削除パスワード

No.25445

Re:構造体2
投稿者---fuku(2006/01/17 17:44:49)


>ENDが入力された時に、
>入力を終了させたいのですが、
>できません。
>どのように、考えたらいいのでしょうか?
>よろしくお願いします。

関数 input_data はEND で終了するけど
for文 の中に input_data があるから
またループがスタートしちゃう
つまり,DATA_MAXの5件分入力が求められているのかな..

for文の中に input_data 内で END が入力されたことを
判定するようにすればいいかも
返り値に flag を渡すとか・・
(私ならそうする)


この投稿にコメントする

削除パスワード

No.25447

Re:構造体2
投稿者---mine(2006/01/17 18:27:16)


返却値を使用したのですが、
何も返却されません。
返却値の使い方は間違っていますか?

よろしくお願いします。

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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256
#define FINISH 0

typedef struct eyesight
{
    double eye1;
    double eye2;
}Eyesight;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

int input_data(Person *);

void display_data(Person *,int,int);

int main(void)
{
    int cnt;
    int judge;
    Person member[DATA_MAX];

    for(cnt = 0 ; cnt < DATA_MAX ; cnt++)                 
    {
        judge = input_data(&member[0]);

        if(judge == FINISH)
        {
            break;
        }
        printf("Input data is nothing!\n");
    }

    display_data(&member[0],DATA_MAX,cnt);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt)
{
        printf("\n********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%-*s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
                  (dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
                  (dmem+cnt)->home.eye2);
        }
    
    
    printf("\n");
    return ;

}

int input_data(Person *pmem)
{
int a;
    char buf[BUF];

    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0')
        {
            a=FINISH;
        }
        else
        {
            if(strlen(&buf[0])<=NAME_MAX)                      
            {
                strcpy(&pmem[0].name[0],&buf[0]);         
                break;                                         
            }
            printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1);

            printf("Height : ");
            scanf("%f",&pmem[0].hei);

            printf("Weight : ");
            scanf("%f",&pmem[0].wei);

            printf("Eye(L) : ");
            scanf("%f",&pmem[0].home.eye1);

            printf("   (R) : ");
            scanf("%f",&pmem[0].home.eye2);
    
        }
    }
   return a;
}



この投稿にコメントする

削除パスワード

No.25448

Re:構造体2
投稿者---fuku(2006/01/17 19:32:51)


>返却値を使用したのですが、
>何も返却されません。
>返却値の使い方は間違っていますか?
>

a = FINISH の後に break; が抜けてる

επιστημηさんも仰ってましたが,
要所要所に printf 放り込むなどして
逐一確認して下さい.

あと,
掲示板に書き込む前に,
input_data関数 の if 〜 else はあなたのやりたい処理に
合致するのか
main で a は表示されるのかとか考えて下さいね
色々試すことが先決かと・・







この投稿にコメントする

削除パスワード

No.25450

Re:構造体2
投稿者---mine(2006/01/17 20:32:58)


>επιστημηさんも仰ってましたが,
>要所要所に printf 放り込むなどして
>逐一確認して下さい.

言われてから、やるようにしています。

>あと,
>掲示板に書き込む前に,
>input_data関数 の if 〜 else はあなたのやりたい処理に
>合致するのか
>main で a は表示されるのかとか考えて下さいね
>色々試すことが先決かと・・

自分の中では、いろいろと考えたり、
プログラムを変更して、実行してみたりしてます。
知識が深いわけでもないので、
すぐに息詰まってしまい、また、このプログラムを
明後日までに完成させないといけないので書き込んでしまうんです。
しかも、正直言って、どこを修正すればいいのかも分からなくなってきてます。


この投稿にコメントする

削除パスワード

No.25451

Re:構造体2
投稿者---fuku(2006/01/17 21:04:08)


>しかも、正直言って、どこを修正すればいいのかも分からなくなってきてます。

自分自身でプログラムを書いている以上,修正したいことも分かるはず(検討がつくはず)
前も言いましたが,小さなプログラムを動かして
ちょっとずつ機能を増やしていくと良いと思いますよ
やりたいことをまず紙に書き落としてみると良いかも

私も人に意見できるほど達者ではありませんが,がんばりましょうね

あと,今のままでは構造体にちゃんと格納出来てないから
前にお教えしたもの参考にして
作ってみてください.


この投稿にコメントする

削除パスワード

No.25502

Re:構造体2
投稿者---mine(2006/01/20 01:49:46)


入力した数値を出力できません。
どのようにしたらいいのでしょうか?

よろしくお願いします。

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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256
#define FINISH 0
#define OTHER 1

typedef struct eyesight
{
    double eye1;
    double eye2;
}Eyesight;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

int input_data(Person *);

void display_data(Person *,int,int,int);

int main(void)
{
    int cnt;
    int judge;
    Person member[DATA_MAX];

    for(cnt = 0 ; cnt < DATA_MAX ; cnt++)                 
    {
        judge = input_data(&member[0]);

        if(judge == FINISH)
        {
            break;
        }
    }

    display_data(&member[0],DATA_MAX,cnt,judge);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt , int judge)
{

    if(judge == FINISH)
    {
        printf("\nInput data is nothing!");
    }
   else
   {
        printf("\n********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%-*s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
                  (dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
                  (dmem+cnt)->home.eye2);
        }      
    } 
    printf("\n");
    return ;

}

int input_data(Person *pmem)
{
    int a;
    char buf[BUF];

    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0')
        {
            a=FINISH;
            break;
        }
    

        else if(strlen(&buf[0])>=NAME_MAX)                      
        {
             a=OTHER;
             strcpy(&pmem[0].name[0],&buf[0]);  
             break;
        }
             printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1);


            printf("Height : ");
            scanf("%f",&pmem[0].hei);

            printf("Weight : ");
            scanf("%f",&pmem[0].wei);

            printf("Eye(L) : ");
            scanf("%f",&pmem[0].home.eye1);

            printf("   (R) : ");
            scanf("%f",&pmem[0].home.eye2);

    }
    return a;
}






この投稿にコメントする

削除パスワード

No.25503

Re:構造体2
投稿者---fuku(2006/01/20 02:16:44)


>入力した数値を出力できません。
>どのようにしたらいいのでしょうか?
>
>よろしくお願いします。

input_data関数の if 〜 else 文がおかしいですね
今の状態だと
if "END" が入力されれば終了(break;)
else があるので END 以外で,19文字以上なら文字列を格納して終了(break;)
するようになってます.

19文字以内の間違いでは?
else if(strlen(&buf[0]) <= NAME_MAX)

あと,名前入力が成功して数値入力に移りたいなら
else文 の中に break 入れたらダメですよね

    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0')
        {
            a=FINISH;
            break;
        }
        else if(strlen(&buf[0]) >= NAME_MAX)                      
        {
            printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1);
            continue;
        }
        else{
            a=OTHER;
            strcpy(&pmem[0].name[0],&buf[0]);
        }
        ・
        ・
        ・
        数値入力
     }

こうしたらどうでしょう?

あと,関数抜けるとき常に a = FINISH になるけど
ホントにそれで良いですか?
データ件数0件 かつ "END"入力されたときにのみ
a = FINISH
じゃないですか?
今のままだと,いくら入力してもdisplay_data関数で表示してくれないと思うよ


この投稿にコメントする

削除パスワード

No.25504

Re:構造体2
投稿者---mine(2006/01/20 02:50:48)


書き込みありがとうございました。

0件かつENDで終了するif()に変更したら、
1件目にどんな文字が入力されても終了してしまいます。
なぜなのかが、まったく分かりません。
あと、continueは使用を禁じられているので使用できません。

数値が出力されないのは、入力値が格納されていないからだと
思うのですが?
格納先をどのように、指定すればいいのかがよく分かりません。

よろしくお願いします。

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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256
#define FINISH 0
#define OTHER 1

typedef struct eyesight
{
    double eye1;
    double eye2;
}Eyesight;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

int input_data(Person *,int);

void display_data(Person *,int,int,int);

int main(void)
{
    int cnt;
    int judge;
    Person member[DATA_MAX];

    for(cnt = 0 ; cnt < DATA_MAX ; cnt++)                 
    {
        judge = input_data(&member[0],cnt);

        if(judge == FINISH)
        {
            break;
        }
    }

    display_data(&member[0],DATA_MAX,cnt,judge);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt , int judge)
{


    if(judge == FINISH)
    {
        printf("\nInput data is nothing!");
    }
   else
   {
        printf("\n********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%-*s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
                  (dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
                  (dmem+cnt)->home.eye2);
        }      
    } 
    printf("\n");
    return ;

}

int input_data(Person *pmem,int cnt)
{
    int a;
    char buf[BUF];

    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0' || cnt == 0)
        {
            a=FINISH;
            break;
        }

       else if(strlen(&buf[0])>=NAME_MAX)                      
        {
             printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1); 
             break;
        }
             

        else{
            a=OTHER;
            strcpy(&pmem[0].name[0],&buf[0]);
        }


            printf("Height : ");
            scanf("%lf",&pmem[0].hei);

            printf("Weight : ");
            scanf("%lf",&pmem[0].wei);

            printf("Eye(L) : ");
            scanf("%lf",&pmem[0].home.eye1);

            printf("   (R) : ");
            scanf("%lf",&pmem[0].home.eye2);
}

    return a;
}



この投稿にコメントする

削除パスワード

No.25574

Re:構造体2
投稿者---mine(2006/01/21 21:26:38)


書き込みありがとうございました。

名前と数値の入力回数が5件目を入力した後も出力にいかずに、
入力の無限ループになってしまうのですが、
入力を5件で終了するには、どのようにしたらいいのでしょうか?
if()を使ったりして、いろいろ試してみたのですが、
上手くいきませんでした。

よろしくお願いします。



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

#define NAME_MAX 19
#define DATA_MAX 5
#define BUF 256
#define FINISH 1
#define OTHER 0

typedef struct eyesight
{
    double eye1;
    double eye2;
}Eyesight;

typedef struct person
{
    char name[NAME_MAX+1];
    double hei;
    double wei;
    Eyesight home;
}Person;

int input_data(Person *,int);

void display_data(Person *,int,int,int);

int main(void)
{
    int cnt;
    int judge;
    Person member[DATA_MAX];

    for(cnt = 0 ; cnt < DATA_MAX ; cnt++)                 
    {

        judge = input_data(&member[0],cnt);

        if(judge == FINISH)
        {
            break;
        }
    }

    display_data(&member[0],DATA_MAX,cnt,judge);

    return 0;
}

void display_data(Person *dmem , int max_cnt , int cnt , int judge)
{


    if(judge == FINISH)
    {
        printf("\nInput data is nothing!");
    }
   else
   {
        printf("\n********Name***********Hi*****We***(L) Eye (R)**\n");
        for(cnt = 0 ; cnt < max_cnt ; cnt++)
        {
            printf("%-*s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&(dmem+cnt)->name[0],
                  (dmem+cnt)->hei,(dmem+cnt)->wei,(dmem+cnt)->home.eye1,
                  (dmem+cnt)->home.eye2);
        }      
    } 
    printf("\n");
    return ;

}

int input_data(Person *pmem,int cnt)
{
    int a;
    char buf[BUF];


    while(1)
    {
        printf("\nName   : ");
        scanf("%s",&buf[0]);
        if(buf[0] == 'E' && buf[1] == 'N' && buf[2] =='D' && buf[3] =='\0' && cnt == 0)
        {
            a=FINISH;
            break;
        }
       else
       {

        if(strlen(&buf[0])>=NAME_MAX)                      
        {
            printf("\nSorry. Input less than %d characters.\n",NAME_MAX+1); 
            break;
        }
        else
        {
            a=OTHER;
            strcpy(&pmem[0].name[0],&buf[0]);
        }

            printf("Height : ");
            scanf("%lf",&pmem[0].hei);

            printf("Weight : ");
            scanf("%lf",&pmem[0].wei);

            printf("Eye(L) : ");
            scanf("%lf",&pmem[0].home.eye1);

            printf("   (R) : ");
            scanf("%lf",&pmem[0].home.eye2);

}
}

    return a;
}




この投稿にコメントする

削除パスワード

No.25575

Re:構造体2
投稿者---επιστημη(2006/01/21 21:37:32)


>名前と数値の入力回数が5件目を入力した後も出力にいかずに、
>入力の無限ループになってしまうのですが、

「そうなるはず」ですか? それとも
「そんなコード書いてない」ですか?

>入力を5件で終了するには、どのようにしたらいいのでしょうか?

入力部のループ while (1) { ... } を改め、5回で抜ければいい。



この投稿にコメントする

削除パスワード

No.25581

Re:構造体2
投稿者---mine(2006/01/21 22:41:23)


書き込みありがとうございます。

1つだけお願いがあります。
書き込んでくれた内容がいつも分かりにくいので、
もう少し、分かりやすく書き込んでもらえないでしょうか?
多分、いつもの書き込みが理解できるようなら、
20回近くも質問しないと思うんで。

よろしくお願いします。


この投稿にコメントする

削除パスワード

No.25582

Re:構造体2
投稿者---あかま(2006/01/21 22:57:39)


>書き込んでくれた内容がいつも分かりにくいので、
大抵、質問の仕方が悪いんだよ。
よい質問の仕方なら、答えも簡潔でスレッドも短くなる。

1.何がしたいのか
2.現在どうなってしまうのか
3.自分で何を試したのか

最低この3つ。あなたは1と3が足りない。


この投稿にコメントする

削除パスワード

No.25583

Re:構造体2
投稿者---KING・王(2006/01/21 23:25:57)


#長文失礼

>1つだけお願いがあります。
>書き込んでくれた内容がいつも分かりにくいので、
>もう少し、分かりやすく書き込んでもらえないでしょうか?

このような掲示板では、初心者の方には、直接的な回答をせずに、ヒントだけを与えて、
質問者の方のスキル向上(脱初心者)を促す傾向があります。

mineさんはご自分が書かれているコードの意味を理解されていますか?
例えば、あなたのコードでinput_data()関数の中に、
> while(1)
> {
(中略)
> }
とありますが、なぜwhile()を使用しているのか、また、()の中に1を入れているのか、
理解されていますか?

また、すでに書かれていますが、printf()を用いて、プログラムがどの順番で実行されているか、
また、条件文の前後などでは、各変数の値がどのような値になっているかなどを知れべて見てください。
どこのループを何回回っているか、とかを調べれば、すぐに問題点に気付くと思いますが。


開発環境が明示されていなかったと思うのですが、ステップ実行ってできないのですか?
ステップ実行ができるなら、ステップ実行でソースコードデバッグをすれば、すぐに解決しそうに思うのですが。

また、プログラムの中にコメントをつけるように心がけましょう。
特に、初心者の場合、多少冗長になっても、
この部分で何をしているのかをコメントに書けば、
プログラムの内容が理解しやすくなると思いますし、
また、質問する場合も、あなたがどのようなつもりで(何がしたくて)、
そのようなコードを書いたが分かり、話がはやく進みます。



この投稿にコメントする

削除パスワード

No.25584

Re:構造体2
投稿者---KING・王(2006/01/21 23:33:17)


とりあえず、mineさんのコードを見て、気付いたヒントを。

input_data()関数は、何をする関数(のつもり)ですか?
1回分の入力用関数?それとも5回分の入力用関数?
おそらく、1回分の入力用関数だと思われるので、
1回、正しいデータが入力されたら、input_data()関数から抜けましょう。

また、main()の中で、5回入力するためにfor文でループしていると思うのですが、
毎回同じ場所にデータが入力しようとしているので、
仮に入力部分が5回でループを抜けても、正しく表示されないでしょう。


この投稿にコメントする

削除パスワード

No.25589

Re:構造体2
投稿者---επιστημη(2006/01/22 00:23:48)


>書き込んでくれた内容がいつも分かりにくいので、
>もう少し、分かりやすく書き込んでもらえないでしょうか?

そか?

あなたの書いたコード、正直言って"ガタガタ"です。
input_dataの第二引数cntが全く機能していません。
input_dataがひとつのPersonをきっちり入力できるよう、
正しく実装されているのなら、input_dataを5回呼ぶだけ。

途中で入力を打ち切りたいなら、input_dataが"入力中断"
を表す値を返し、呼び側がそれに正しく反応するだけ。

それぞれの関数が何をどうするのか、引数の意味と値、戻り値の意味
などなど、ご自分でも把握できていないのではありませんか?



この投稿にコメントする

削除パスワード

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