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

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

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

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

ファイル

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

806閲覧

ファイルを作る、開く方法(構造体、成績管理システム)

741s

総合スコア5

C

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

ファイル

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/08 18:26

実現したいこと

成績管理システムを作成しています。
名前、学籍番号、3教科の得点からなる構造体を用いてファイルを読み込み、ファイル内データを表示したり平均点を求めるものです。

ファイルの内容を成績管理システムと同じプログラム内に作ることは可能でしょうか?
ファイルオープンし、その後の処理を実行したいです。
ソートなどの関数は作ってあり、エラーは出ていません。

(初歩的な質問で申し訳ありません。コロナの影響で大学がリモートになり昨年と使っているソフトが違い、よくわからなくなってしまいました。)

ソースコード

/*成績管理システム*/ #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; int main(void) { int a,b,c,d; int i=0; int cnt=0; double mave,eave,pave; //構造体作成 Student human[NUMBER]={ {"Shimizu","h741", 50.0,60.0, 70.0}, {"Mayu","h777", 60.0, 70.0, 80.0}, {"Momo","h500", 80.0, 80.0, 80.0}, }; /*ファイル読み込み*/ FILE *fp; //int i=0; if((fp = fopen("hw.dat","r"))==NULL){ printf("\aファイルをオープンできません。\n"); } else{ while(fscanf(fp,"%s %s %lf %lf %lf",human[i].name,human[i].number,&human[i].math,&human[i].eng,&human[i].phy)){ 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); i++; } fclose(fp); } return i; printf("平均点を表示しますか? はい:1 いいえ:2  :"); scanf("%d",&a); if(a==1){ sum_Student(human,cnt,&mave,&eave,&pave); printf("数学の平均点は%3.1lfです。",mave); printf("英語の平均点は%3.1lfです。",eave); printf("物理の平均点は%3.1lfです。",pave); } do{ printf("各順にソートしますか? はい:1 いいえ:2  :"); scanf("%d",&b); if(a==1){ printf("どのデータによってソートしますか? 名前:1 学籍番号:2 数学:3 英語:4 物理:5  :"); scanf("%d",&c); printf("昇順と降順どちらでソートしますか? 昇順:1 降順:2  :"); scanf("%d",&d); if(c==1&d==1){ puts("\n名前を昇順にソートしました。"); sort_by_name1(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); } if(c==1&d==2){ puts("\n名前を降順にソートしました。"); sort_by_name2(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); } if(c==2&d==1){ puts("\n学籍番号を昇順にソートしました。"); sort_by_number1(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); } if(c==2&d==2){ puts("\n学籍番号を降順にソートしました。"); sort_by_number2(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); } if(c==3&d==1){ puts("\n数学の得点を昇順にソートしました。"); 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); } if(c==3&d==2){ puts("\n数学の得点を降順にソートしました。"); sort_by_math2(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); } if(c==4&d==1){ puts("\n英語の得点を昇順にソートしました。"); sort_by_eng1(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); } if(c==4&d==2){ puts("\n英語の得点を降順にソートしました。"); sort_by_eng2(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); } if(c==5&d==1){ puts("\n物理の得点を昇順にソートしました。"); sort_by_phy1(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); } if(c==5&d==2){ puts("\n物理の得点を降順にソートしました。"); sort_by_phy2(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); } } }while(b!=2); return 0; }

実行結果
ファイルをオープンできません。

試したこと

main関数内で構造体の内容を作成してみましたがやはり反映されませんでした.

補足

使用PCはWindows10でプログラム作成に使用しているソフトはpaiza.ioという無料サイトです。

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

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

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

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

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

cateye

2020/07/08 21:03

paiza.ioって、ファイルの書き込み出来ましたっけ?
741s

2020/07/09 02:53

同じプログラム(エディタエリア)内ではできないみたいです。 気づかせていただきありがとうございます。
guest

回答2

0

ベストアンサー

存在しないファイルを読み込もうとしたら開けなかった、ということですよね?
とりあえず自分で該当するデータが入っているファイルを作って paiza.io にアップロードしたら少し前進するんじゃないかと思います。

https://paiza.io/help?locale=ja-jp に「エディターエリアにファイルをドラッグアンドドロップするとファイルのアップロードが可能です。」と書いてあります。それ以降にも複数ファイルのアップロードの仕方などが書いてあります。

投稿2020/07/08 23:27

編集2020/07/08 23:32
bboydaisuke

総合スコア5308

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

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

741s

2020/07/09 02:53

ご回答ありがとうございます。 paiza.ioでは新しいエディタエリアを開きそこにデータ入力するのですね。 リンクありがとうございます。paiza.ioについて勉強になりました。これからも授業でファイル作成があると思うので助かりました。
guest

0

ファイルの内容を成績管理システムと同じプログラム内に作ることは可能でしょうか?

どのようなことをしたいのかわかりません。
もっと具体的な処理内容を書くことは出来ますか?

ファイルオープンし、その後の処理を実行したいです。

実行結果
ファイルをオープンできません。

C

1 if((fp = fopen("hw.dat","r"))==NULL){ 2 printf("\aファイルをオープンできません。\n"); 3 }

「ファイルをオープンできません」とは上記部分でfopenによるファイルオープンが出来ず、printf()のエラーメッセージが表示されてしまうということですか?

また、main()の途中で「return i;」が入っていてそれ以降進まなくなっていますが、作業の過程で一時的に入っているものですか?

※以下、コメントを受けて追記

同じプログラム内で
Shimizu h741 50.0 60.0 70.0
(名前 学籍 点数)
等のデータが入ったファイルを作りたいです。

ファイルを書き込みモードでオープンし、

C

1fp = fopen( "hw.dat", "w+" );

そのファイルに構造体配列の内容を書き込めば良いです。当然読み込む際と書き込む際の書式は合わせる必要があります。

C

1fprintf( fp, "Shimizu h741 50.0 60.0 70.0\n" ); /* 実際には構造体の内容を書き込む */

投稿2020/07/08 19:01

編集2020/07/08 19:23
hidezzz

総合スコア1248

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

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

741s

2020/07/08 19:11

読んでいただきありがとうございます。わかりずらく申し訳ありません。 同じプログラム内で Shimizu h741 50.0 60.0 70.0 (名前 学籍 点数) 等のデータが入ったファイルを作りたいです。 ファイル自体が存在しないので「ファイルオープンされません。」は合っていると思います。 「return i;」は消し忘れです。不備が多くて申し訳ないです。
hidezzz

2020/07/08 19:22

回答に追記しました。
741s

2020/07/09 02:50

追記ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問