ページ 11

ファイルの読み取り

Posted: 2010年6月26日(土) 22:31
by タマ
↓のプログラムは、名前、学生番号、年齢、メールアドレスを入力して
同じ場所にあるmyinfo.txtに情報を保存するプログラムです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "myinfo.txt"
int main(void)
{
char name[100];
char number[100];
char age[100];
char address[100];
FILE *fp;
fp=fopen(FILENAME, "w");
printf("Your name, please:\n");
fgets(name,sizeof(name),stdin);
printf("Your student number, please:\n");
fgets(number,sizeof(number),stdin);
printf("Your age, please:\n");
fgets(age,sizeof(age),stdin);
printf("Your e-mail address, please:\n");
fgets(address,sizeof(address),stdin);
fprintf(fp,"%s",name);
fprintf(fp,"%s",number);
fprintf(fp,"%s",age);
fprintf(fp,"%s",address);
fclose(fp);
return(0);
}

このプログラムに変更を加えて、myinfo.txtにある情報を読み込み出力するプログラムを作るのに困ってます。
fopenの"w"を"r"に変える事、fscanf、fgetsを用いる事がヒントに書かれてました。

Re:ファイルの読み取り

Posted: 2010年6月26日(土) 22:42
by Poco
このままじゃ、課題の丸投げになっちゃうので、規約等を参考に不明点を掘り下げてください。

#それはそうと、上のプログラムで保存したデータは、名前、電話番号、年齢、住所の区別が
#つかなくなる気がするんですが。。

Re:ファイルの読み取り

Posted: 2010年6月26日(土) 22:55
by タマ
すみませんでした。
分からない部分はまさにそこで、fscanfを使った後にfgetsを使えと書いてあるのですが、
区別の仕方が良く分からないんです。

Re:ファイルの読み取り

Posted: 2010年6月26日(土) 23:01
by シエル
fgetsで一行ずつ読み込んで表示すればいいのではないでしょうか?

Re:ファイルの読み取り

Posted: 2010年6月26日(土) 23:16
by Poco
> #それはそうと、上のプログラムで保存したデータは、名前、電話番号、年齢、住所の区別が
> #つかなくなる気がするんですが。。

上の発言取り消します。

>分からない部分はまさにそこで、fscanfを使った後にfgetsを使えと書いてあるのですが、

「fscanf 例 C言語」や「「fgets 例 C言語」」辺りをキーワードにググッてみては?

#自分で例を書いちゃうと、まんま答えになっちゃいそうなので。

Re:ファイルの読み取り

Posted: 2010年6月27日(日) 00:36
by タマ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "myinfo.txt"
int main(void)
{
char name[100];
char number[100];
char age[100];
char address[100];
FILE *fp;
fp=fopen(FILENAME, "r");
fscanf(fp,"%d",&name);
fscanf(fp,"%d",&number);
fscanf(fp,"%d",&age);
fgetc(fp);
fscanf(fp,"%d",&address);

fprintf(fp,"My name:%s\n",name);
fprintf(fp,"My student number:%s\n",number);
fprintf(fp,"My age:%s\n",age);
fprintf(fp,"My e-mail address:%s\n",address);
fclose(fp);
return(0);
}
途中経過です。コンパイルしても何も出てきません。
あと、fgetsを入れるようにしたいのですが、どこに入れるべきでしょうか?

Re:ファイルの読み取り

Posted: 2010年6月27日(日) 01:00
by box
> fp=fopen(FILENAME, "r");
> fprintf(fp,"My name:%s\n",name);
> fprintf(fp,"My student number:%s\n",number);
> fprintf(fp,"My age:%s\n",age);
> fprintf(fp,"My e-mail address:%s\n",address);

読み込み用にオープンしたファイルに書き込もうとしているので、
考え方が破綻しています。
また、途中にある

> fgetc(fp);

この文の意味が不明です。 画像

Re:ファイルの読み取り

Posted: 2010年6月27日(日) 01:01
by シエル
fscanfやfgetc等の使い方をもう少し調べてみて下さい。
別にfgetsだけでも書けると思います。

Re:ファイルの読み取り

Posted: 2010年6月27日(日) 01:40
by タマ
int main(void)
{
char name[100];
char number[100];
int age;
char address[100];
FILE *fp;
fp=fopen(FILENAME, "r");
fgets(name,sizeof(name),fp);
fgets(number,sizeof(number),fp);
fscanf(fp,"%d",&age);
fgetc(fp);
fgets(address,sizeof(address),fp);

printf("My name: %s",name);
printf("My student number: %s",number);
printf("My age: %d\n",age);
printf("My e-mail address: %s",address);
fclose(fp);
return(0);
}
自力で解決しました。
ageの部分にintを用いつつ、fgetsとfscanfを両方使いfscanfで読み込めなかった改行部分を
fgetcで省く、つもりのプログラムでした。
説明と理解力でした、すみません。