宿題なのですが、
8人の成績データを"seiseki.dat"のファイルとして保存して、
"seiseki.dat"を読み込んでその中身を表示するプログラムを作成すること。
なお、関数にする必要はないです。
"seiseki.data"は
Aki 75 84 82 60 80 85
Daisuke 90 58 86 64 72 44
Eiko 64 78 72 76 77 79
Hiroshi 79 94 63 75 88 90
Kana 75 62 54 78 59 82
Ryuichi 89 65 88 72 85 68
Takashi 66 48 74 67 82 74
Yuka 76 79 75 84 88 70
というようにする。なお、このファイルは、DATファイルです。
自分なりに考えてみましたがうまくいきませんでした。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
FILE *fp;
char name[30];
int ten;
if((fp=fopen("seiseki.dat","rt"))==NULL){
printf("fopen error\n");
exit(0);
}
while(fscanf(fp,"%s %d",name,&ten)!=EOF){
printf("%s %f\n",name,ten);
}
fclose(fp);
return 0;
}
実行例はこのようになるそうです。
seiseki.datの中身を表示します
1学期 2学期 3学期
名前 英語 数学 英語 数学 英語 数学
Aki 75 84 82 60 80 85
Daisuke 90 58 86 64 72 44
Eiko 64 78 72 76 77 79
Hiroshi 79 94 63 75 88 90
Kana 75 62 54 78 59 82
Ryuichi 89 65 88 72 85 68
Takashi 66 48 74 67 82 74
Yuka 76 79 75 84 88 70
よろしくお願いします
(管理人による記事の修正)
ファイル操作
ファイル操作
Re:ファイル操作
>if((fp=fopen("seiseki.dat","rt"))==NULL){
"rt"って何ですか?
>fscanf(fp,"%s %d",name,&ten)
名前のあとに6科目あるのに、なぜ1教科しかないの?
少し教えて欲しいのですが、しょしょしょしんしゃ さんは、大学の1年生くらいで、プログラムの授業ですか?確かに、プログラムはまるなげではありませんが、わかろうという努力はされてます?参考書なり読めばすぐにでもわかりそうな課題なんですが・・・ファイルを読む課題まで授業が進んでいるのなら、もう少し、基本の分かったプログラムを書かれてもいいような気がするのですが。
厳しいことを言って申し訳ありませんが、いつまで経ってもプログラムができるようになりませんよ。
唯単に、課題のレポートを出せばいいのなら、友人にコピーさせてもらった方がいいのでは。
"rt"って何ですか?
>fscanf(fp,"%s %d",name,&ten)
名前のあとに6科目あるのに、なぜ1教科しかないの?
少し教えて欲しいのですが、しょしょしょしんしゃ さんは、大学の1年生くらいで、プログラムの授業ですか?確かに、プログラムはまるなげではありませんが、わかろうという努力はされてます?参考書なり読めばすぐにでもわかりそうな課題なんですが・・・ファイルを読む課題まで授業が進んでいるのなら、もう少し、基本の分かったプログラムを書かれてもいいような気がするのですが。
厳しいことを言って申し訳ありませんが、いつまで経ってもプログラムができるようになりませんよ。
唯単に、課題のレポートを出せばいいのなら、友人にコピーさせてもらった方がいいのでは。
Re:ファイル操作
すいませんでした。
しかし 残念ながら 自分の実力を知った上で
しかも 私自身そのような友人は、
いませんので このように ネット上の力を借りて
質問しているのです。
プログラミングの力は uouさん の言うとおり
いつまでも できないかもしれませんが
誰かの返答で 私自身で何か 発見があるかもしれない
と期待していただけなのです。
できることなら 小言より 何か ヒントを書いてくれる方が
有難かったです....。
>"rt"って何ですか?
テキストファイルの読み込みのことらしいです。違いますか?
まあ't'はなくてもよろしいのですが...。
しかし 残念ながら 自分の実力を知った上で
しかも 私自身そのような友人は、
いませんので このように ネット上の力を借りて
質問しているのです。
プログラミングの力は uouさん の言うとおり
いつまでも できないかもしれませんが
誰かの返答で 私自身で何か 発見があるかもしれない
と期待していただけなのです。
できることなら 小言より 何か ヒントを書いてくれる方が
有難かったです....。
>"rt"って何ですか?
テキストファイルの読み込みのことらしいです。違いますか?
まあ't'はなくてもよろしいのですが...。
Re:ファイル操作
これで点数がもらえるかどうかは、よくわかりません。 #include <stdio.h> int main(void) { FILE *fp; char name[10]; int a, b, c, d, e, f, i; fp = fopen("seiseki.dat", "r"); if (!fp) return printf("file open error\n"), 1; printf(" 1学期 2学期 3学期\n"); printf(" 英語 数学 英語 数学 英語 数学\n"); for (i = 0; i < 8; ++i) { fscanf(fp, "%s%d%d%d%d%d%d", name, &a, &b, &c, &d, &e, &f); printf("%-11s%5d%5d%5d%5d%5d%5d\n", name, a, b, c, d, e, f); } fclose(fp); return 0; }
Re:ファイル操作
別の解です。 #include <stdio.h> int main(void) { FILE *fp; char name[8], a[4], b[4], c[4], d[4], e[4], f[4]; int i; fp = fopen("seiseki.dat", "r"); if (!fp) return printf("file open error\n"), 1; printf(" 1学期 2学期 3学期\n"); printf(" 英語 数学 英語 数学 英語 数学\n"); for (i = 0; i < 8; ++i) { fscanf(fp, "%s%s%s%s%s%s%s", name, a, b, c, d, e, f); printf("%-9s%5s%5s%5s%5s%5s%5s\n", name, a, b, c, d, e, f); } fclose(fp); return 0; }
Re:ファイル操作
大変 遅くなりましたが
管理人さんのような練習問題と初級者さんの答えのおかげで、
うまくまとまることができました。
ありがとうございます。
思ったよりは、 uouさんが言っていた通り、用意なプログラムであったので、
私のレヴェルが 低く 申し訳ありませんでした。
管理人さんのような練習問題と初級者さんの答えのおかげで、
うまくまとまることができました。
ありがとうございます。
思ったよりは、 uouさんが言っていた通り、用意なプログラムであったので、
私のレヴェルが 低く 申し訳ありませんでした。
#include <stdio.h> #include<stdlib.h> int main(void) { FILE *fp; int ten1,ten2,ten3,ten4,ten5,ten6,i; char name[10]; printf(" 1学期 2学期 3学期\n"); printf(" 英語 数学 英語 数学 英語 数学\n"); if((fp=fopen("seiseki.dat","r"))==NULL){ printf("no flile data\n"); exit(1); } for(i=0;i<8;++i){ fscanf(fp,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF; printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6); } fclose(fp); return 0; }
Re:ファイル操作
大変 申し訳ないのですが
また 私の力不足で 詰まってしまいました。
同じような質問 で 悪いのですが
seiseki.dat のファイルに seiseki2.dat というファイル
を読み込んで
seiseki.dat の中身に seiseki2.dat
を追加するプログラムの作成するということなのですが、
上手くいきませんでした。 seiseki2.datはこのようになります。
Eisuke 75 68 74 82 80 77
Hajime 55 68 68 75 82 70
Junko 89 65 83 71 77 58
Kumi 73 90 75 93 65 82
Muneo 66 62 54 70 75 75
Ryota 80 75 72 79 60 66
Sonoko 50 86 45 85 61 89
というところは'r'より'a'のほうが よいのでしょうか?
ご検討 お願いします。
また 私の力不足で 詰まってしまいました。
同じような質問 で 悪いのですが
seiseki.dat のファイルに seiseki2.dat というファイル
を読み込んで
seiseki.dat の中身に seiseki2.dat
を追加するプログラムの作成するということなのですが、
上手くいきませんでした。 seiseki2.datはこのようになります。
Eisuke 75 68 74 82 80 77
Hajime 55 68 68 75 82 70
Junko 89 65 83 71 77 58
Kumi 73 90 75 93 65 82
Muneo 66 62 54 70 75 75
Ryota 80 75 72 79 60 66
Sonoko 50 86 45 85 61 89
#include <stdio.h> #include<stdlib.h> int main(void) { FILE *fp,*fp2; int ten1,ten2,ten3,ten4,ten5,ten6,i; char name[10]; char ch; printf("seiseki.datの中身を表示します。\n"); printf(" 1学期 2学期 3学期\n"); printf("名前 英語 数学 英語 数学 英語 数学\n"); if((fp=fopen("seiseki.dat","r"))==NULL){ printf("no flile data\n"); exit(1); } for(i=0;i<8;++i){ fscanf(fp,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF; printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6); } if((fp2=fopen("seiseki2.dat","r"))==NULL){ printf("no flile data\n"); exit(1); } for(i=0;i<7;++i){ fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF; printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6); } while((ch=fgetc(fp2))!=EOF){ fputc(ch,fp); } fclose(fp); fclose(fp2); return 0; }>if((fp=fopen("seiseki.dat","r"))==NULL){
というところは'r'より'a'のほうが よいのでしょうか?
ご検討 お願いします。
Re:ファイル操作
>これは恐らく警告がでるのでは。条件式ですよ。
インターネットの検索で条件式っていれて検索すれば出てきますよ。
ファイルの追加については、例えば、
http://rina.jpn.ph/~rance/c_language/p15.html
ここを読んでから分からないところを尋ねてください。
インターネットの検索で条件式っていれて検索すれば出てきますよ。
ファイルの追加については、例えば、
http://rina.jpn.ph/~rance/c_language/p15.html
ここを読んでから分からないところを尋ねてください。
Re:ファイル操作
> for(i=0;i<7;++i){
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
> while((ch=fgetc(fp2))!=EOF){
> fputc(ch,fp);
> }
この部分をなくして
これでは うまくいきませんでしたが・・・・。
他の部分 も 間違えている可能性が あるので 調べてみます。
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
> while((ch=fgetc(fp2))!=EOF){
> fputc(ch,fp);
> }
この部分をなくして
if((fp2=fopen("seiseki2.dat","a+"))==NULL){ printf("no flile data\n"); exit(1); }だけ でよろしいのですか?
これでは うまくいきませんでしたが・・・・。
他の部分 も 間違えている可能性が あるので 調べてみます。
Re:ファイル操作
> while((ch=fgetc(fp2))!=EOF){
> fputc(ch,fp);
> }
この部分だと
効果がないのですけど どうですか?
> for(i=0;i<7;++i){
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
この部分を消すと 上手く実行できませんでした
全然 3時間考えましたが、わかりません・・・。
ヒントを もらえませんか・・・
> fputc(ch,fp);
> }
この部分だと
効果がないのですけど どうですか?
> for(i=0;i<7;++i){
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
この部分を消すと 上手く実行できませんでした
全然 3時間考えましたが、わかりません・・・。
ヒントを もらえませんか・・・
Re:ファイル操作
> for(i=0;i<7;++i){
データが7人分だから7回繰り返している。
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
ファイル2を読み込んでいる。このとき読んだ分だけ、ファイルポインタは移動している。
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
読み込んだデータをディスプレイに表示している。
7回繰り返したのでファイルポインタはファイルの終わり(EOF)を指している。
> while((ch=fgetc(fp2))!=EOF){
ファイルがEOFになるまで繰り返そうとしているが、すでにEOFである。
> fputc(ch,fp);
> }
データが7人分だから7回繰り返している。
> fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 )!=EOF;
ファイル2を読み込んでいる。このとき読んだ分だけ、ファイルポインタは移動している。
> printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6);
> }
読み込んだデータをディスプレイに表示している。
7回繰り返したのでファイルポインタはファイルの終わり(EOF)を指している。
> while((ch=fgetc(fp2))!=EOF){
ファイルがEOFになるまで繰り返そうとしているが、すでにEOFである。
> fputc(ch,fp);
> }
Re:ファイル操作
#include <stdio.h> #include<stdlib.h> int main(void) { FILE *fp,*fp2; int ten1,ten2,ten3,ten4,ten5,ten6,i; char name[10]; char ch; printf("seiseki.datの中身を表示します。\n"); printf(" 1学期 2学期 3学期\n"); printf("名前 英語 数学 英語 数学 英語 数学\n"); if((fp=fopen("seiseki.dat","r"))==NULL){ printf("no flile data\n"); exit(1); } for(i=0;i<8;++i){ fscanf(fp,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 ); printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6); } if((fp2=fopen("seiseki2.dat","a+"))==NULL){ printf("no flile data\n"); exit(1); } for(i=0;i<7;++i){ fscanf(fp2,"%s%d%d%d%d%d%d",name,&ten1,&ten2,&ten3,&ten4,&ten5,&ten6 ); printf("%-11s%5d%5d%5d%5d%5d%5d\n",name,ten1,ten2,ten3,ten4,ten5,ten6); } fclose(fp); fclose(fp2); return 0; }このようになりましたが
まだ上手くできません 修正箇所を あげてください
自分の限界です。
解決はまだしていません
ご協力 お願いします。
Re:ファイル操作
組木紙織さんのおっしゃる通り、おそらくまだ考えが浅いと思います。
nonさんが挙げられたページをしっかり読むとNo.24203でおかしな点がすぐ出ると思います。
今から行うことは
>seiseki.dat のファイルに seiseki2.dat というファイル
>を読み込んで
>seiseki.dat の中身に seiseki2.dat
>を追加するプログラムの作成する
ですよね?
以下の点を考えてみてください。
1、seiseki.datに「書き込む」(今自分のseiseki.datのファイル処理はどうなっていますか?)
2、seiseki2.datを読み込む際、自分の用意した変数ですべてのデータを保存する
2、においては、No.24098初級者さんのご回答がヒントになると思います。
これができたら書き込みですね。これもnonさんの挙げられたサイト内にちゃんと書いてあります。
nonさんが挙げられたページをしっかり読むとNo.24203でおかしな点がすぐ出ると思います。
今から行うことは
>seiseki.dat のファイルに seiseki2.dat というファイル
>を読み込んで
>seiseki.dat の中身に seiseki2.dat
>を追加するプログラムの作成する
ですよね?
以下の点を考えてみてください。
1、seiseki.datに「書き込む」(今自分のseiseki.datのファイル処理はどうなっていますか?)
2、seiseki2.datを読み込む際、自分の用意した変数ですべてのデータを保存する
2、においては、No.24098初級者さんのご回答がヒントになると思います。
これができたら書き込みですね。これもnonさんの挙げられたサイト内にちゃんと書いてあります。