以下のプログラムで、Inout dataの中で、"END"と入力されたら、終了する条件を追加したいんですけど、どうすればいいでしょうか?
returnを使っても、次に入力が進んでしまいます(汗)
NOT_END等を使用して、メインにアドレス返却する方法を使うみたいですけど、よく分かりませんm(_ _)m
#include <stdio.h>
#include <string.h>
#define PERSONDATA_MAX 2 /* 個人データの最大件数 */
#define NAME_MAX 19 /* 名前の最大文字数 */
#define BUF 256 /* 一時領域の大きさ */
int name(char);
typedef struct person /* 個人データ構造体の宣言 */
{
char name[NAME_MAX+1]; /* 名前 */
double height;
double weight;
double l;
double r;
}Person;
void sort_data(Person *, int);
void disp_data(Person *, int);
void input_data(Person *);
int main(void)
{
int cnt;
Person member[PERSONDATA_MAX]; /* 構造体配列の定義 */
for(cnt = 0 ; cnt < PERSONDATA_MAX ; cnt++)
{
input_data(&member[cnt]);
sort_data(&member[0], PERSONDATA_MAX);
}
disp_data(&member[0],cnt); /* 出力関数呼出し */
return 0;
}
void disp_data(Person *pmem, int max_cnt) /* 入力データ表示関数 */
{
int cnt; /* ループのカウンタ */
printf("\n********Nama***********Hi*****We***(L) Eye (R)**\n");
for(cnt = 0 ; cnt < PERSONDATA_MAX ; cnt++)
{
sort_data(&pmem[0], PERSONDATA_MAX);
printf("%-*s %5.1f %5.1f %5.3f %5.3f\n",NAME_MAX,&pmem[cnt].name[0],pmem[cnt].height,pmem[cnt].weight,pmem[cnt].l,pmem[cnt].r);
}
printf("\n");
return;
}
void input_data(Person *pmem) /* データ入力関数 */
{
char buf[BUF];
while(1)
{
printf("\nName : ");
scanf("%s",&buf[0]); /* 名前の入力 */
if(strlen(&buf[0]) <= NAME_MAX) /* 入力文字数のチェック */
{
strcpy(&pmem->name[0],&buf[0]);
break; /* メンバにコピー */
}
printf("\nSorry. Input less than %d characters.\n",
NAME_MAX+1);
}
printf("Height : ");
scanf("%lf",&pmem->height);
printf("Weight : ");
scanf("%lf",&pmem->weight);
printf("Eye(L) : ");
scanf("%lf",&pmem->l);
printf("Eye(R) : ");
scanf("%lf",&pmem->r);
return;
}
void sort_data(Person *pmem, int max_cnt)
{
int cnt1;
int cnt2;
Person temp;
for(cnt1 = 0; cnt1<max_cnt-1; cnt1++)
{
for(cnt2=cnt1+1; cnt2<max_cnt; cnt2++)
{
if( (pmem +cnt1)->height > (pmem +cnt2)->height )
{
temp = *(pmem +cnt1);
*(pmem +cnt1) = *(pmem +cnt2);
*(pmem +cnt2) = temp;
}
}
}
}