ファイルの読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ほのか

ファイルの読み込み

#1

投稿記事 by ほのか » 16年前

お世話になっております。

添付ファイルを参照していただきたいのですが、ファイルへの書き込みはできるようになりましたが、読み込みがうまくいきません;
どうしたらきちんと読み込みできますでしょうか??
読み込みの方も新しく関数を作った方が良いのでしょうか?

box

Re:ファイルの読み込み

#2

投稿記事 by box » 16年前

読込みがどのようにうまくいかないかを、具体的に書いていただけますか?
プログラムを実行したときに、何かエラーメッセージが出るのですか?

non

Re:ファイルの読み込み

#3

投稿記事 by non » 16年前

ファイルの読み込みをしている部分はどこですか?
ざっとみたけど、見つからないのですが。

それより、前にも言ったようにmain文をwhile(1)で回して、終了をexitするのは
やめましょうよ。

case 9:で終了フラグを立てるようにして、(例えば end_flg=1)
while(!end_flg)にするとかです。

それに、mainでfopenしたとき、オープンできないときはreturnしているので
elseを書く必要はありません。

ほのか

Re:ファイルの読み込み

#4

投稿記事 by ほのか » 16年前

回答ありがとうございます。
ファイルの読み込みは、main関数のwhile文の前で行うつもりです。
while(1)などの部分は修正させていただきます。ご指摘ありがとうございます。

non

Re:ファイルの読み込み

#5

投稿記事 by non » 16年前

>ファイルの読み込みは、main関数のwhile文の前で行うつもりです。

行うつもりで、まだ作っていないなら、動かないのは当然ですね。

>読み込みの方も新しく関数を作った方が良いのでしょうか?
fopenのところから含めて関数にする方がわかりやすいと思います。

ほのか

Re:ファイルの読み込み

#6

投稿記事 by ほのか » 16年前

作ってみましたが上手くいかなかったため消したものをUPしたのです…

box

Re:ファイルの読み込み

#7

投稿記事 by box » 16年前

> 作ってみましたが上手くいかなかったため消したものをUPしたのです…

その、うまくいかない部分を見せる方が、
「ここをこうすればうまくいく」という
具体的な回答が届きやすいと思います。

ほのか

Re:ファイルの読み込み

#8

投稿記事 by ほのか » 16年前

while (fgets(s, 256, fp) != NULL) {
   printf("%s", s);
.
.
.
}

上記のような感じにしましたが、実行してみても何も表示されないまたは(NULL)と表示されます。

non

Re:ファイルの読み込み

#9

投稿記事 by non » 16年前

そこだけみてもわかりません。
面倒でも、すべてを入力したプログラムをアップしてください。

なお、writeの関数ですが、
fprintf(fp,"氏名: %s\n",data.name);
のように、"氏名:"の部分はファイルに出力しない方がいいですね。
実際のデータのみにした方がいいです。

ほのか

Re:ファイルの読み込み

#10

投稿記事 by ほのか » 16年前

ファイルを新しくUPしました。
読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;

non

Re:ファイルの読み込み

#11

投稿記事 by non » 16年前

確認ですが、
>	while(fgets(filedata,1024,fp)!=NULL){
>		printf("%s",filedata);
>	}
ここで、読み込んだデータは画面に出力されていますか?

>読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;

この文章を読むと、上のデータは出力されていると思えます。
次に、「■■住所登録者■■」のところで表示されないというのは、filedataに読み込んだデータを
Jusyoroku data[20];に代入していないから、あたりまえでしょう。
一度プログラムを終了するとデータが消えているのは、同じ名前で書き込みのためにオープンしたから
これも当然でしょう。

ほのか

Re:ファイルの読み込み

#12

投稿記事 by ほのか » 16年前

読み込んだデータは画面に出力されています。
Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?
同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;

non

Re:ファイルの読み込み

#13

投稿記事 by non » 16年前

>Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?

このwhile内ですね。
> while(fgets(filedata,1024,fp)!=NULL){
> printf("%s",filedata);
> }



>同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;

データが正しく格納されるようになったら上書きしても大丈夫でしょう。
または、保存する前に名前を再度入力できるようにするとか?(別名保存)

それに、fcloseしてくださいね。
開けたままにしておくのはマナー違反

ほのか

Re:ファイルの読み込み

#14

投稿記事 by ほのか » 16年前

回答ありがとうございます。
Jusyoroku data[20];に代入するにはどのようにしたら良いのでしょうか…
data = filedata;とかでは駄目だったのでよくわかりません;

pooka

Re:ファイルの読み込み

#15

投稿記事 by pooka » 16年前

こんな感じでどうでしょうか?
int count = 0;

while(fgets(filedata,1024,fp) != NULL){
	if(strcmp(filedata,"\n") == 0)
		continue;
	switch(count%5){	//5は氏名、郵便番号、住所、電話番号、性別の5個
		case 0:
			strcpy(data[cnt].name,filedata);
			break;
		case 1:
			strcpy(data[cnt].yubin,filedata);
			break;

		//あと同じように

	}
	if(++count%5 == 0)
		++cnt;
}
fgetsで読み込んだfiledataには改行文字も含まれているので、別途処理が必要になるかもしれません。

ほのか

Re:ファイルの読み込み

#16

投稿記事 by ほのか » 16年前

回答ありがとうございます。
表示されるようになりました^^ありがとうございます。

しかし、改行をどうやったら消せるのかわかりません;
それと、性別のところをどうやったら表示させられるでしょうか?;
今のままだと何も表示されません;

新しくファイルを添付させていただきます。

pooka

Re:ファイルの読み込み

#17

投稿記事 by pooka » 16年前

今から出かけるので性別だけ
if(strcmp(filedata,"男性\n") == 0)
	strcpy(data.sei,"1");
else
	strcpy(data.sei,"2");

書き込むときに「性別:」を書いてない、また改行文字を削除していないと仮定しています。

ほのか

Re:ファイルの読み込み

#18

投稿記事 by ほのか » 16年前

ありがとうございます!
これからソースを修正してみます^^
改行の部分も自分でまた色々と試してみます!
でもわからない可能性が高いのでまた質問させていただくと思います;

閉鎖

“C言語何でも質問掲示板” へ戻る