- 締切済み
リストです
三人の年齢と身長を入力して、身長順にソートするプログラムの穴埋め問題を解いていたのですが、【@】のところが分かりません。*ppdt[i]=*pdtにするとできるのですが…。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define MEMBER 3 typedef struct member{ int age; int height; }DATA; int inputHeight(){ int a; scanf("%d",&a); return a; } int inputAge(){ int b; scanf("%d",&b); return b; } void prepare(DATA *ppdt[]){ DATA *pdt; int i,j; for(i=0;i<【MEMBER】;i++){ 【pdt=(DATA*)malloc(sizeof(DATA));】 pdt->age=inputAge(); pdt->height=inputHeight(); printf("age>>%d\ttall>>%d\n",pdt->age,pdt->height); ppdt[i]=【@】; free(pdt); } } int lessthanHeight(DATA *obj1,DATA *obj2){ if(obj1->height<=obj2->height){ return 1; } else{ return 0; } } void sortD(DATA *ppdt[]){ DATA *temp; int i,j; for(i=0;i<MEMBER;i++){ for(j=i+1;j<MEMBER;j++){ if(lessthanHeight(ppdt[j],ppdt[i])){ temp=ppdt[i]; ppdt[i]=ppdt[j]; ppdt[j]=temp; } } } } int main(void){ int i; DATA *ppdt[MEMBER]; for(i=0;i<MEMBER;i++){ ppdt[i]=(DATA*)malloc(sizeof(DATA)); } prepare(ppdt); sortD(ppdt); for(i=0;i<MEMBER;i++){ printf("age>>%d\ttall>>%d\n",ppdt[i]->age,ppdt[i]->height); } for(i=0;i<MEMBER;i++){ free(ppdt[i]); } return 0; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
私もここは *ppdt[i]=*pdt で良いと思いますが… 私には他の方法は考え付きませんね。 問題の誤りということはないでしょうか?
お礼
回答ありがとうございます。 for(i=0;i<【MEMBER】;i++){ 【pdt=(DATA*)malloc(sizeof(DATA));】 pdt->age=inputAge(); pdt->height=inputHeight(); printf("age>>%d\ttall>>%d\n",pdt->age,pdt->height); ppdt[i]=【@】; free(pdt); } } のfreeを消せば、ppdt[i]=pdtでも大丈夫でしたが、freeがあるときは*ppdt[i]=*pdtでないと駄目っぽいです…。 自分と同じ考えの人がいて少し安心できました。