問題
「3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。ただし、データは構造体で記憶することとし、また、データの入力と表示はそれぞれ専用の関数を作って行うこととする。」という問題を元に、何人分でも入力できるように改造しなさい。なお、年齢に-1が入力されれば入力終了とする。
発生している問題・エラーメッセージ
エラー自体は発生していないですがうまくwhile文が機能しないでループを抜け出せません。
該当のソースコード
C
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { char name[64], sex[10]; int age; } profile; void input_profile(profile data); void output_profile(profile data); int main(void) { int i, count = 0, datasize = 10; profile* data = malloc(sizeof(profile) * datasize); while (1) { input_profile(data[count]); if (data[count].age == -1) break; count++; if (count >= datasize) { datasize += 10; data = (profile *)realloc(data, sizeof(profile) * datasize); } } for (i = 0; i < count; i++) { output_profile(data[i]); } free(data); return 0; } void input_profile(profile data) { printf("名前:"); scanf("%s", data.name); printf("年齢:"); scanf("%d", &data.age); printf("性別:"); scanf("%s", data.sex); } void output_profile(profile data) { printf("%s\n", data.name); printf("%d\n", data.age); printf("%s\n", data.sex); }
###実行結果
ざっとこんな感じで永遠と入力が促されます
名前:as 年齢:20 性別:male 名前:tanaka 年齢:90 性別:female 名前:o 年齢:41 性別:male 名前:
###備考
一度正常に機能するかループの部分を一旦消してプログラムを実行してみなのですがoutput_profile関数がうまく機能しませんでした。output_profileの引数に問題があるのではないかと考えていますがどう間違っているかまだわかっておりません。さらに、if (data[count].age == -1)break;と記述してるのにbreakが機能しない理由もわかりせん。
まだ回答がついていません
会員登録して回答してみよう