C言語の課題をやっております。
C言語の課題をやっております。
ずいぶん考えたのですが、行き詰まってしまいました。
課題は、
1.構造体を作り、名簿風の決められたデータを入れる(初期化?)
2.名前の順に並べ替える
3.画面に表示する
という3段階です。
これらを1つのmain関数内で作ることはできたのですが、
それぞれinput sort output関数で作り、main関数で呼び出して完成させる必要があります。
sort outputはかろうじてできたのですが、inputが動かせません。
今の考えとしては、mainでinputを呼び出し、
input関数内で構造体を初期化して、戻り値で構造体のアドレス?をmainに返して、
そのアドレスをそれぞれsort outputに渡し、処理してもらいたいと考えています。
エラーのでる箇所は、main関数の構造体アドレスのやりとりと、
input関数の戻り値のあたりで 問題のあるポインタ、とか移植性のないポインタ、などと
出てしまいます。
書いたプログラムをmain,input,sortまで載せます。
整理できておらずわかりにくいプログラムですが、考え方、間違っているところ、修正点など
ご意見を頂きたく思っています。
よろしくお願いします。
# include <stdio.h>
struct day {
int yy;
int mm;
int dd;
};
typedef struct hito {
int NO;
char NAME[10];
struct day ENTRANCE;
struct day BIRTH;
}HITO;
void main(void){
int input(void);
int output(struct hito *pt);
int sort(struct hito *pt);
int i,j;
int x;
struct hito *pt;
pt=input();
sort(pt);
output(pt);
return;
}
int input(void){
int i,x;
struct hito *ptt;
HITO list[9]= {
{1456, "okayama", 2004,4,1, 1980,2,4},
{2452, "wada", 2005,4,1, 1984,10,2},
{2552, "ikeyama", 2005,4,1, 1987,5,10},
{3456, "meguro", 2006,4,1, 1982,5,2},
{4242, "sagami", 2007,10,1, 1972,3,3},
{5123, "ohsawa", 2008,10,1, 1965,2,2},
{5222, "akagi", 2009,1,4, 1988,3,4},
{6212, "hasebe", 2009,4,1, 1990,8,3},
};
return list;
}
int sort(struct hito *pt){
int i,j,x;
for (i=0; i<8; i++){
for(j=i+1; j<9; j++){
if((pt+i)->NAME[0] > (pt+j)->NAME[0]){
*(pt+9)=*(pt+i);
*(pt+i)=*(pt+j);
*(pt+j)=*(pt+9);
}
}
}
return 0;
}