以下の問題のプログラムをやったのですが、コマンドプロンプトで実行してみるとエラーになってしまうのですが、どなたか問題点を指摘していただけないでしょうか?
【問題】
学籍番号、氏名、出席からなる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;
}
}
}
}
No.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"が最終要素の次を指すことになるためです。
ところで
>エラーになってしまうのですが
は、情報を提示していない。
・意図した結果にならない
・不正な処理で落ちる
多分後者かな。情報を伝える書き方をしたほうが
回答もらいやすいと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
間接操作のレベルとは
-
CStringをwchar_tに変換したい
-
バイトスワップをやりたい
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
enumの記述について。
-
配列をnビットシフトする
-
ユニコード文字列の分割
-
DPマッチング
-
C言語です
-
RGB→YUV変換のプログラム
-
C言語のビットフィールドについて
-
c++ 文字列を入力して、一文字...
-
C言語のポインターで詰まっている
-
ワイルドカードを用いた文字列検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報