① 3人の名前と年齢をキーボードから入力し、構造体を使って記憶させる。
※年齢は0から100までの整数を入力範囲とし、それ以外は範囲外とみなし再入力をさせる旨のメッセージを表示し再入力を待つ。
② プログラムが「誰の年齢を表示させたいか」を聞いてくるので、キーボードから名前を入力する。
③ 入力した名前の年齢が表示され、プログラム終了。
※記憶されていない名前が入力された場合は「該当者がいません」と表示しプログラム終了。
自分一人ではわからない部分があります。それは、このプログラムに①での3人の名前を入力するときに『同一の人物名を入力した際に「同一名の人物名が入力されています』と表示させ、再入力を待つ」という処理を付け加えたいのですが、どこになにを付け加えたらいいのかわかりません。
どなたかご教授いただけると嬉しいです。
環境はOS:windows7,コンパイラはVC++です。
C言語は初心者です。よろしくおねがいします
#include <stdio.h>
#include <string.h>
#define N_PERSON 3
struct person {
char name[20];
int age;
};
int read_age()
{
char buf[256];
int age;
int is_number;
int i;
do{
scanf("%s", buf);
is_number = 1;
for(i = 0; i < strlen(buf); i++) {
if(!isdigit(buf[i])) {
is_number = 0;
age = -1;
break;
}
}
if(is_number == 1) {
age = atoi(buf);
}
if(age < 0 || age > 100) {
printf("1から100までの範囲で入力せよ\n");
}
} while (age < 0 || age > 100);
return age;
}
int main()
{
int i;
struct person persons[N_PERSON];
char buf[256];
int found;
printf("3人の名前と年齢を教えてください\n");
for(i = 0; i < N_PERSON; i++) {
printf("%d人目\n", i + 1);
scanf("%s", persons[i].name);
persons[i].age = read_age();
}
printf("だれの年齢を表示するか名前を入力してください\n");
scanf("%s", buf);
found = -1;
for(i = 0; i < N_PERSON; i++) {
if(strcmp(buf, persons[i].name) == 0) {
found = i;
break;
}
}
if(found == -1) {
printf("該当者がいませんでした\n");
exit(0);
}
else {
printf("%sは%d歳です。\n", persons[i].name, persons[i].age);
}
}