質問: 以下のプログラムを実行したいんですが、構造体配列の入れ替えがうまくいきません。 void seiseki(Student seito[],int n)のところです。
回答: まずおかしい部分です。★部 void seiseki(Student seito[], int n) { int i, j; Student temp[N];//★使用できるインデクス番号は0~(N-1)まで for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (seito[i].ave > seito[j].ave) { temp[n] = seito[i];//★temp[n]は確保されている配列を越えたメモリを指しているため、隣接するメモリを破壊します seito[i] = seito[j]; seito[j] = temp[n]; } } } printf("変更後\n"); for (i = 0; i < n; i++) printf("%20s %4d %4d %f\n", seito[i].name, seito[i].math, seito[i].eng, seito[i].ave); return; }