質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

1回答

2058閲覧

ソート内容の出力(成績管理システム、構造体)

741s

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2020/07/09 21:51

編集2020/07/09 23:10

実現したいこと

・個人データ(名前、学籍番号、3教科の得点)を構造体で表す
・データをファイルから読み込む
・名前、在籍番号、3教科の得点のいずれかと昇順か降順を選んでソートできるようにする。←この部分が出来ないです。

なぜソートの結果、"printf"内が出力されないのでしょうか。
どなたかご教示よろしくお願いいたします。

出力結果

ファイル読み込み:1 終了:0  : Mami h567 60.0 80.0 70.0 Momo h878 80.0 90.0 70.0 Kinoshita h698 90.0 60.0 70.0 Koko h767 80.0 80.0 80.0 ファイル読み込み:1 終了:0  :

ソースコード

/*成績管理システム*/ #include<stdio.h> #include<string.h> #include<math.h> #define NAME_LEN 128 #define NUM_LEN 64 #define NUMBER 5 /*学生を表す構造体*/ typedef struct{ char name[NAME_LEN]; //名前 char number[NUM_LEN]; //学籍番号 double math; //数学の得点 double eng; //英語の得点 double phy; //物理の得点 }Student; /*x,yで指す学生の入れ替え*/ void swap_Student(Student *x,Student *y) { Student temp = *x; *x = *y; *y = temp; } /*数学の得点順にソート*/ void sort_by_math1(Student a[],int n) //昇順 { int i,j; for(i = 0;i < n - 1;i++){ for(j = n - 1;j > i;j--) if(a[j-1].math > a[j].math) swap_Student(&a[j - 1],&a[j]); } } /*ファイルの読み込み*/ int out_file(Student a[]) { FILE *fp; int i = 0; if((fp = fopen("File1","r")) == NULL) printf("\aファイルをオープンできません\n"); else{ while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)==5){ printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); i++; } fclose(fp); } return i; } int main(void) { int flag=0; int i=0; int cnt=0; Student human[40]; do{ printf("ファイル読み込み:1 終了:0  :\n"); scanf("%d",&flag); if(flag==1) out_file(human); }while(flag!=0); sort_by_math1(human,cnt); for(i=0;i<cnt;i++) printf("%-10s %-10s %5.1f %5.1f %5.1f\n",human[i].name,human[i].number,human[i].math,human[i].eng,human[i].phy); return 0; }

補足

paiza.ioという無料サイトでC言語で作成しています。

ソースコードを短くするために数学の得点をソートする関数のみ記載しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/07/09 22:44

以前のご質問から続けてのプログラム作成だと思いますが、問題の原因がご自身で分からないのであれば、paiza.ioの利用では限界があるということで、解決の依頼をしているようなものです。デバッグ環境を整えましょう。トレース(一行ごとに実行)すれば原因が分かります。
741s

2020/07/09 23:37

ご指摘ありがとうございます。 今後質問する際気を付けます。誠に申し訳ございません。
guest

回答1

0

ベストアンサー

printf("各順にソートしますか? はい:1 いいえ:2  :");

1scanf("%d",&b); 2if(a==1){

このように変更してみてはどうでしょうか?

if(a==1){ ↓ if(b==1){

投稿2020/07/09 22:49

編集2020/07/09 23:00
makotokw

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

741s

2020/07/09 23:14

ご回答ありがとうございます。このif文より前で"a"で受けている部分があるので両方"b"で統一しました。 しかしif文をなくしてみたところソート自体が表示できませんでした。 質問内容を更新したのでもしお時間ございましたらご確認、ご指摘いただければ幸いです。
741s

2020/07/09 23:30 編集

"a"以外でのところでも間違い見つかり無事解決いたしました。 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問