プロが教える店舗&オフィスのセキュリティ対策術

以下の問題のプログラムをやったのですが、コマンドプロンプトで実行してみるとエラーになってしまうのですが、どなたか問題点を指摘していただけないでしょうか?

【問題】
学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替
 えて表示するプログラム。
 例
 CA180002 山田太郎 70
 CA170001 山田次郎 60
 データは、適当なものを使います。

【プログラム】
#include <stdio.h>
#include <string.h>

typedef struct student_t {
char id[9];
char name[51];
unsigned int attendance;
} student;

student stu[10];
int stu_i = 0;

void student_new(const char *, const char *, unsigned int);
void student_sort(void);

int
main(void)
{
int i;

student_new("5", "宮本恒靖", 5);
student_new("14", "三都主アレサンドロ", 1);
student_new("21", "加地亮", 9);
student_new("22", "中澤佑二", 6);
student_new("7", "中田英寿", 2);
student_new("8", "小笠原満男", 8);
student_new("10", "中村俊輔", 7);
student_new("15", "福西崇史", 3);
student_new("9", "高原直泰", 4);
student_new("13", "柳沢敦", 0);

student_sort();

for (i = 0; i < stu_i; ++i) {
printf("%s %s %d\n", stu[i].id, stu[i].name, stu[i].attendance);
}
}

void
student_new(const char *id, const char *name, unsigned int att)
{
strcpy(stu[stu_i].id, id);
strcpy(stu[stu_i].name, name);
stu[stu_i].attendance = att;
stu_i++;
}

void
student_sort(void)
{
int i, j;
student tmp;

for (i = 0; i < stu_i; ++i) {
for (j = i + 1; j < stu_i; ++j) {
if (stu[i].attendance > stu[j].attendance) {
tmp = stu[i];
stu[i] = stu[j];
stu[j] = tmp;
}
}
}
}

A 回答 (1件)

試してないけどバブルソートの場合


比較元は最終要素の1つ前で終わるようにする。

このプログラムならケツから10行目
for (i = 0; i < stu_i; ++i) {
ここを
for (i = 0; i < (stu_i - 1); ++i) {
にしたらどうでしょう。

理由は比較先の
for (j = i + 1; j < stu_i; ++j) {
"j = i + 1"が最終要素の次を指すことになるためです。

ところで
>エラーになってしまうのですが
は、情報を提示していない。
・意図した結果にならない
・不正な処理で落ちる
多分後者かな。情報を伝える書き方をしたほうが
回答もらいやすいと思いますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!