前提・実現したいこと
身長、名前をキーボードから入力して身長の昇順にソートするか、名前の昇順(文字数)にソートするか選べるようにするプログラムをつくりたいです。
発生している問題・エラーメッセージ
関数sort_by_nameが間違っているため、名前の昇順がうまくいかないのですがどこが間違っているかわかりません。
該当のソースコード
#include<stdio.h> #include<string.h> #define NAME_LEN 64 #define NUMBER 5 typedef struct { char name[NAME_LEN]; int height; float weight; long schols; }student; void swap_student(student *x,student *y){ student temp=*x; *x=*y; *y=temp; } void sort_by_height(student a[],int n){ int i,j; for(i=0;i<n;i++){ for(j=n-1;j>i;j--){ if(a[j-1].height>a[j].height){ swap_student(&a[j-1],&a[j]); } } } } void sort_by_name(student a[],int n){ int i,j; for(i=0;i<n;i++){ for(j=n-1;j>i;j--){ if(strcmp(a[j-1].name,a[j].name)>0){ swap_student(&a[j-1],&a[j]); } } } } int main(void) { int i; int j; student a[NUMBER]; for(i=0;i<NUMBER;i++){ printf("name:");scanf("%s",a[i].name); printf("height:");scanf("%d",&a[i].height); printf("weight:");scanf("%f",&a[i].weight); printf("schols:");scanf("%ld",&a[i].schols); } do{ printf("height or name:0 or 1");scanf("%d",&j); }while(!(j==0||j==1)); if(j==0){ sort_by_height(a,NUMBER); }else{ sort_by_name(a,NUMBER); } for(i=0;i<NUMBER;i++){ printf("%-8s,%6d%6.1f%7ld\n",a[i].name,a[i].height,a[i].weight,a[i].schols); } return 0; } ``` ### 試したこと ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー