###前提・実現したいこと
【C言語構造体のtmpを使ったソート方法】
研究課題が学校から出されまして
c言語の構造体のソートを行うプログラムを提出する必要が有ります。
具体的には構造体のデータで並び替えを行い(ソート方法は自由)
新しく並び替えた構造体の内容を表示するプログラムが書きたいです。
以下にプログラムを記載します。
c
1/* 2*c言語課題問題文 3* 4* 構造体を配列化(要素数3)し、初期値を入れて表示させた後 5* 国語の点数の高い順に並び替えて表示するプログラムを完成させる 6*/ 7 8#include <stdio.h> 9 10struct seiseki { 11 int no; /* 学生番号 */ 12 char name[128]; /* 氏名 */ 13 int kokugo; /* 国語点数 */ 14 15}; 16 17/* 現在の配列の状態を表示する */ 18void printOut(int len, struct seiseki *pt) 19{ 20 int i = 0; 21 22 for(i = 0;i < len; i++){ 23 printf("%d %s %d\n", (pt + i)->no, (pt + i)->name, (pt + i)->kokugo); 24 } 25 26} 27 28 29/* 配列を降順に並べ替える */ 30void sortDesc(int len, struct seiseki *pt) 31{ 32 int i, j; 33 struct seiseki *tmp; 34 35 for(i = 0; i < len-1; i++){ 36 37 for(j = len-1; j > i; j--){ 38 39 if((pt + j)->kokugo > (pt + j - 1)->kokugo){ 40 41 tmp = (pt + j); 42 (pt + j) = (pt + j - 1); 43 (pt + j - 1) = tmp; 44 45 } 46 47 } 48 49 } 50 51} 52 53 54 55int main() 56{ 57 int i; 58 int len; 59 struct seiseki *pt; 60 61 struct seiseki seito[3] = { 62 { 1, "KASAHARA", 83 }, 63 { 2, "NAGANO", 57 }, 64 { 3, "TAKESHITA", 66 }, 65 }; 66 67 len = sizeof(seito) / sizeof(seito[0]); /* 配列の長さを算出 */ 68 pt = seito; /* ポインタに指定 */ 69 70 printOut(len, pt); 71 72 printf("\n国語の点数の高い順に並び替えます\n\n"); 73 sortDesc(len, pt); 74 75 printOut(len, pt); 76 77 78 return 0; 79} 80```c ``` 81---------------------------------------------------------- 82 83 84###発生している問題・エラーメッセージ 85エラーメッセージを確認すると 86 87 tmp = (pt + j); 88 (pt + j) = (pt + j - 1); 89 (pt + j - 1) = tmp; 90 91値を入れ替えているこの場所で 92何かがおかしく動かないと思いますが 93調べてもいまいち理由が判別できませんでした。 94御存知の方がいらっしゃれば修正方法をご教授下さい、 95 96宜しくお願い致します。
読みにくいのでコードは「```c」「```」で括ってください。
回答2件
あなたの回答
tips
プレビュー