• 締切済み

このプログラムの処理の流れを教えて下さい

初心者です。構造体のプログラムの勉強をしているのですが、このプログラムの処理の流れを考えたのですがよくわかりませんでした。理解を深めるために必要なので、どうかよろしくお願いします。 #include<stdio.h> #include<string.h> int main(void) { struct roll { char name[32]; float height; char bloodType[3]; }; struct roll data[128]; int i; for(i = 0;i < 128;i++){ printf("%d人目のデータ: ", i + 1); scanf("%s %f %s", &data[i].name, &data[i].height, &data[i].bloodType); if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; } } printf("名前\t身長\t血液型\n"); for(i = 0;i < 128;i++){ if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; } printf("%s\t%3.1f\t%s\n", data[i].name, data[i].height, data[i].bloodType); } } <実行例> 1人目のデータ: 太郎 175.5 A ←キーボードからそれぞれ入力する 2人目のデータ: 花子 169.0 B ←キーボードからそれぞれ入力する 3人目のデータ: 一郎 180.4 O ←キーボードからそれぞれ入力する 4人目のデータ: 0 0 0 ← 0 0 0 とキーボードから入力すると終わる 名前 身長 血液型 太郎 175.5 A 花子 169.0 B 一郎 180.4 O

みんなの回答

回答No.2

#include<stdio.h> #include<string.h> int main(void) { struct roll { /* 構造体の宣言 */ char name[32]; float height; char bloodType[3]; }; struct roll data[128]; /* struct roll型の配列型 data の宣言 */ int i; /* int型 i の宣言 */ for(i = 0;i < 128;i++){ /* 入力用ループ(0~127) */ printf("%d人目のデータ: ", i + 1); /* 入力を促す表示 */ scanf("%s %f %s", &data[i].name, &data[i].height, &data[i].bloodType); /* 各データの入力 */ if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; /* BloodType に'0'が入力されたら終了 */ } } printf("名前\t身長\t血液型\n"); /* 項目名表示 */ for(i = 0;i < 128;i++){ /* 表示用ループ */ if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; /* BloodType が'0'なら終了 */ } printf("%s\t%3.1f\t%s\n", data[i].name, data[i].height, data[i].bloodType); /* データ表示 */ } /* "return 0"がない。 */ }

nadonado
質問者

お礼

丁寧にありがとうございました。おかげでわかりました。

  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

かなり質問が漠然としているので、何を答えたら良いかの検討がつきません。 構造体についての勉強ということですが、プログラムの流れとどう関係があるのですか? もう少し知りたいポイントを絞って質問されるとよろしいかと。 一応、簡単な流れ 1.データをキーボードから入力(000が入力されるまで) 2.入力されたデータをprintで表示 くらいしか思いつきません。

関連するQ&A

  • 構造体のプログラミング...練習です。

    構造体のプログラミング...練習です。 #include <stdio.h> int main ( void ) { int i; struct rool{ char name[20]; float height; char bloodType; }date[128]; for(i = 0;; i++) { printf("%d人目のデータ:", i + 1 ); scanf("%s %f %c",date[i].name[i], &date[i].height, &date[i].bloodType); if((date[i].name[0] == '0') && (date[i].height == 0) && (date[i].bloodT\ ype == 0)) { break; } } printf("名前    体重     歳\n"); for(i = 0; (date[i].name[0] == '0') && (date[i].height == 0) && (date[i].bl\ oodType == 0); i++) { printf("%s, %10s, %10s\n",date[i].name[i], date[i].height, date[i].bloodTy\ pe); } return 0; } 構造体を使ったプログラミングです。 名前と体重、歳を入力して0 0 0が入力されたら、今まで入力したものを表示する。というものです。 セグメントエラーが出て困っています。 入力をしてエンターキーを押すと、何人目のデータ:何人目のデータ:~と言うふうにでて、セグメントエラーで止まります。 よろしくお願いします。

  • C言語 プログラム 解決法

    下記のプログラムのif文なんですが、[0 0 0]と入力しても止まりません。。どういう風に書けば[0 0 0]でブレークされるのでしょうか? お願いします。 --------------------------------------------------------------------- for(i=0;i<127;i++){ scanf("%s %f %c",peason[i].name,&peason[i].height,&peason[i].bloodType); if(peason[i].name == 0 && peason[i].height == 0 && peasoon[i].bloodType == '0' ) break; }

  • プログラムがちゃんと動きません

    C言語です まず人数を入力した後に 名前と身長と体重を入力する関数get_psと それらの情報を人数分出力する関数print_psを使い mainで実行するというプログラムを作ったのですが 思うように動きません どのようにすればいいでしょうか? #include<stdio.h> struct ps_data{ char name[20]; double hgt; double wgt; }; void get_ps(struct ps_data *p,int a) { int i=0; printf("name height weight:"); scanf("%s %lf %lf",(p+i)->name,&(p+i)->hgt),&(p+i)->wgt); i++; } void print_ps(struct ps_data *p,int a) { int i; for(i=0;i<a;i++) printf("%s :height=%lf weight=%lf \n",(p+i)->name,(p+i)->hgt,(p+i)->wgt); } int main(void) { int n,i; struct ps_data ps_dat[20]; printf("Number:"); scanf("%d",&n); for(i=0;i<n;i++) { get_ps(ps_dat,i); } print_ps(ps_dat,n); return 0; }

  • 構造体についてです。

    身体測定表を作っていて最初に作ったデータを変更して表示したいのですがNo1の168cm→162cm No2の74kg→74.5kg  No3の20歳→19歳 No4の田中三郎→小林三郎 (No3と4は構造体ポインタを使ってデータを変更) 全データを表示させてその後No1と3の名前~体重を丸ごと入れ替えて全データを表示させたいのですがエラーがでてしまいます。 分かる人がいましたらどこを直したらいいか教えて下さい。 #include <stdio.h> #include <string.h> struct data{ int no; char name[21]; int age; int height; float weight; }; struct data *sp; void main(){ int i; struct data a[4]={ {1,"鈴木太郎",23,168,60}, {2,"山本次郎",17,180,74}, {3,"山田花子",20,156,53}, {4,"田中三郎",35,172,68}, }; struct data b; for(i=0;i<4;i++){ printf("番号 :%d\n",a[i].no); printf("名前 :%s\n",a[i].name); printf("年齢 :%d歳\n",a[i].age); printf("身長 :%dcm\n",a[i].height); printf("体重 :%4.1fkg\n\n",a[i]. weight); } a[0].height=162; a[1].weight=74.5; *sp[2].age=19; strcpy(*sp[3].name,"小林三郎"); for(i=0;i<=4;i++){ b=a[0]; a[0]=a[2]; a[2]=b; a[0].no=1; a[2].no=3; } for(i=0;i<=4;i++){ printf("番号 :%d\n",a[i].no); printf("名前 :%s\n",a[i].name); printf("年齢 :%d歳\n",a[i].age); printf("身長 :%dcm\n",a[i].height); printf("体重 :%4.1fkg\n\n",a[i].weight); } }

  • CTR-Dでプログラムを終了

    学校の課題で、 --- 探索キーとして名前を入力し、入力と一致した場合、その名前と年齢を印字することを繰り返す。 CTR-Dが入力されたとき、プログラムを終了する。 また、文字比較の為に関数strcmpを使用する。 --- という課題が出されたのですが、while(scanf("%s", name) != EOF)を入れるとうまくいきません。 自分で途中までやったものは↓のものです。 どこが違うのか教えてください(>_<) #include<stdio.h> #include<string.h> #define N 10 struct card{ char *name; int age; }; struct card meibo[N] = { "Takahashi", 14, "Kobayashi", 15, "Hosokawa", 17, "Sugimoto", 18, "Sawai", 19, "Itou", 20, "Kawai", 22, "Ishikura", 24, "Oda", 25, "Nakamura", 28 }; int main(void){ char *name; int i; printf("name? : "); scanf("%s", name); while (scanf("%s", name) != EOF){ for (i=0; i<N; i++){ if (strcmp(name, meibo[i].name) == 0) break; } } if (i<N){ printf("%s is %d.\n", meibo[i].name, meibo[i].age);} else{ printf("Not found.\n");} return 0; }

  • Cプログラムがどうしても動きません

    Cを勉強中です。 年齢に-1が入力されるまで、名前、年齢、性別を聞くプログラムを作っているのですが、どうしてもうまく動きません。 具体的には、年齢を聞かれず、年齢?性別?_とまとめて表示されてしまいます。 ぜひともどこが間違っているか教えてください。お願いしますm(_ _)m #include<stdio.h> typedef struct{ char name[20]; int year; char sex[6]; }student; void read_data(int,student*); void write_data(int,student*); int main(void){ student data[10]; int i=0,j=0; do{ read_data(i,data); i++; }while(data[i-1].year!=-1); for(j=0;j<=i-1;j++){ write_data(j,data); } return 0; } void read_data(int i,student *data){ printf("%d人目\n",i); printf("名前?\n",i); scanf("%s\n",&(data[i].name)); printf("年齢?\n",i); scanf("%d\n",&(data[i].year)); printf("性別?\n",i); scanf("%s\n",&(data[i].sex)); return; } void write_data(int j,student *data){ printf("%d人目\t",j+1); printf("名前:%s",data[j].name); printf("年:%d",data[j].year); printf("性:%s",data[j].sex); return; }

  • C言語のプログラムで...

    下のプログラムは参考書にあったサンプルプログラムなのですが /* 関数の宣言 */ int print_struct(struct person dat); のところはなぜint型なのですか? #include <stdio.h> #include <string.h> /* 構造体の定義 */ struct person { char name[20]; /* 名前 */ double height; /* 身長 */ double weight; /* 体重 */ int bpl; /* 最低血圧 */ int bph; /* 最高血圧 */ }; /* 関数の宣言 */ int print_struct(struct person dat); /* main関数 */ int main(void) { /* 変数の宣言 */ struct person dat; /* 構造体のメンバーに値を代入 */ strcpy(dat.name,"山田太郎"); dat.height = 173.5; dat.weight = 63.0; dat.bpl = 98; dat.bph = 113; /* struct person関数を実行 */ print_struct(dat); return 0; } /* print_struct関数 */ int print_struct(struct person dat) { /* 画面に出力 */ printf("%s\n",dat.name); printf("%f\n",dat.height); printf("%f\n",dat.weight); printf("%d\n",dat.bpl); printf("%d\n",dat.bph); return 0; }

  • プログラム

    プログラムで2人の、名前と身長と体重を入力して体重と身長の入力値を出力するプログラムを作りました。 しかし、入力と出力の値が違います! このプログラムのどこが間違ってますか?教えてください! #include<stdio.h> #define NUMBER 2 typedef struct { char name[11]; double height; double weight; }student; int main(void) { int i; student a[NUMBER]; for (i=0; i<NUMBER; i++) { printf("これは %d 人目の生徒です(5人まで):\n",i+1); printf("名前を入力してください(10文字以内)\n入力された名前:"); scanf("%s",a[i].name); printf("身長を入力してください(10文字以内)\n入力された身長:"); scanf("%f",&a[i].height); printf("体重を入力してください(10文字以内)\n入力された体重:"); scanf("%f",&a[i].weight); printf("%f %f\n",a[i].weight,a[i].height); } return 0; } 実行結果 これは 1 人目の生徒です(5人まで): 名前を入力してください(10文字以内) 入力された名前:1 身長を入力してください(10文字以内) 入力された身長:1 体重を入力してください(10文字以内) 入力された体重:1 0.000000 0.000000 これは 2 人目の生徒です(5人まで): 名前を入力してください(10文字以内) 入力された名前:1 身長を入力してください(10文字以内) 入力された身長:1 体重を入力してください(10文字以内) 入力された体重:1 0.000000 0.000000 です。

  • C言語での構造体

    C言語の構造体で配列を扱うとき、 struct ○○{  char ○○[○] とすれば出来ますが、同じようにして構造体で二次元配列を扱うことは出来ますか? 一度組んでみたのですが、 #include<stdio.h> struct aaa{ int no; char name[128]; char y_name[128]; char n_name[128]; char s_name[128][128]; }; int main(void){ int i; struct aaa iryo[99]; printf("入力前\n"); /* 構造体配列に scanf()でデータを入力 */ for(i = 0; i < 3; i++) { // printf("input...\n"); scanf("%d", &iryo[i].no); scanf("%s", iryo[i].name); scanf("%s", iryo[i].y_name); scanf("%s", iryo[i].n_name); scanf("%s", iryo[i].s_name); } printf("入力後\n"); printf("出力前\n"); /* 入力データの確認 */ for(i = 0; i < 3; i++) { printf("番号:%02d 内容:%s Y分岐:%s N分岐:%s 他分岐:%s\n", iryo[i].no, iryo[i].name, iryo[i].y_name, iryo[i].n_name, iryo[i].s_name); } printf("出力後\n"); printf("%d",sizeof(struct aaa)); return 0; } としたら、エラーは出ませんが、実行すると何も表示されませんでした。

  • リスト構造がうまく動きません!!

    C言語で以下のようなプログラムを作りました。 「main関数内で下記のデ-タを構造体に格納し、キーボードから入力された名前と該当する学生の身長と年齢を画面に表示するプログラムを作成せよ。」というものです。 このプログラムはコンパイルは通るのですが、2人目以降のデータを表示させようとしても表示してくれません。。。どうもリスト構造のfor文がうまくループしていないみたいなんですが原因が分かりません。どなたか原因の分かる方アドバイスをお願いしますm(_ _)m #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data{ char name[20]; int height; int age; struct data *next; }person; person *newperson(void); int main(void){ char namae[20],s[20]; int toshi,shinchou,i; person *head; person *list; person *nlist; person *LIST; head = newperson(); nlist = head; printf("データを入れてください。\n"); for(i=0;i<=4;i++){ scanf("%s",namae); scanf("%d",&shinchou); scanf("%d",&toshi); list = newperson(); strcpy(list ->name,namae); list -> height = shinchou; list -> age = toshi; nlist -> next = list; nlist = list; } printf("知りたい人の名前は?\n"); scanf("%s",s); for(LIST = head->next;LIST ->next != NULL;LIST = LIST->next){ if(strcoll(s,LIST ->name)==0){ printf("%s\t%d\t%d\n",LIST->name,LIST->height,LIST->age); break; } printf("%s\n",LIST->name); printf("%s\n",LIST->next->name); } return(0); } person *newperson(){ person *dummy; dummy = (person*)malloc(sizeof(person)); dummy -> next = NULL; return(dummy); }

専門家に質問してみよう