OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ファイル中のデータの読むとき・・・・

  • すぐに回答を!
  • 質問No.200097
  • 閲覧数59
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 60% (108/179)

こんにちは。ファイルにあるテキストデータを用意してそれを読み込んでいって、処理をするというプログラム書いてるんですけど、たとえば
大まかな構造として、

int fncCheck(char*pch,char item)
{
int count=0;
int i=0;
for(i=0;i<strlen(pch);i++)
{if(pch[i]==item)
{
count++;
}
}
return count;
}

int main()
{
FILE *fin,*fout;
 //ここでいろいろ宣言

if((fin=fopen("Thermoplasmaacidophilum ","r"))==NULL)
{
cout<<"No files exist in current directory!\n";
exit(-1);
}

if((fout=fopen("Thermoplasmaacidophilum _out","wb"))==NULL)
{
cout<<"Output file can't open!\n";
exit(-1);
}

if((fin=fopen("Thermoplasmaacidophilum ","r"))!=NULL)
{
fwrite(SMF_header,14,1,fout);
fwrite(SMF_firsttrack,36,1,fout);
fwrite(SMF_track,13,1,fout);

do
{
   //ここにdoに関する処理

}
while(numread==100);

while(c=fscanf(fin,"%c",c)!=EOF)
{
  //ここに処理をずらずら
}

printf("There are %d bases!!\n",n);

fclose(fin);
fclose(fout);
}
return 0;
}
・・・のように書くと、一つ目のdo-while文は実行されるんですが、二つ目のwhile文が実行されません。一回目でファイルのデータを最後まで読んでるので、元にもどってもう一回やってくれないんでしょうか?初心者なものでそこらへんがよくわかんないんですが・・。どなたか助けてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 40% (201/496)

掲載したプログラムをちゃんと読んでないのですが(すいません)、fseekでファイルポインタをファイルの先頭まで持っていけば大丈夫でしょう。
#ファイルポインタとは、fopenしたときにファイルの銭湯を指しており、fread等で読み進めると次に読み込む位置を常にさしているものです。
補足コメント
yabuchanchan

お礼率 60% (108/179)

御回答ありがとうございます。えっと、そのfseek関数?ってのを、2回目のwhileの前に書き足せばOKなんでしょうか?
ちょっと、調べてみます。ありがとうございました。
投稿日時 - 2002-01-17 15:55:39
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

先頭まで戻すだけで良ければ、rewind() って関数の方がお手軽かも。 rewind(fin); と使います。 やっていることは、fseek() のある特別なとき、fseek(fin, 0L, SEEK_SET); と やるのと全く同じです。 ...続きを読む
先頭まで戻すだけで良ければ、rewind() って関数の方がお手軽かも。
rewind(fin); と使います。

やっていることは、fseek() のある特別なとき、fseek(fin, 0L, SEEK_SET); と
やるのと全く同じです。
お礼コメント
yabuchanchan

お礼率 60% (108/179)

御回答ありがとうございました。
さっそく、やってみたいと思います。
fseek関数については初めて知ったんですが、いろいろ調べているうちに
便利なもんだなとおもいはじめました。
rewindなんてのもあるんですね。もっと勉強したいと思います。
投稿日時 - 2002-01-17 18:49:10


  • 回答No.3
レベル12

ベストアンサー率 40% (201/496)

プログラムを(今度はちゃんと)見てみました。 ・fin で同じファイルを2回オープンしているのは何故でしょうか?一度オープンが成功していれば2度目は必要ありません。また、同じ変数(fin)を使ってオープンすると、最初にオープンしたものがclose出来なくなってしまいます(プログラムが終了すれば自動的にcloseされるので今回はとりあえず問題ありません)。 ・while(c=fscanf(fin,&qu ...続きを読む
プログラムを(今度はちゃんと)見てみました。
・fin で同じファイルを2回オープンしているのは何故でしょうか?一度オープンが成功していれば2度目は必要ありません。また、同じ変数(fin)を使ってオープンすると、最初にオープンしたものがclose出来なくなってしまいます(プログラムが終了すれば自動的にcloseされるので今回はとりあえず問題ありません)。
・while(c=fscanf(fin,"%c",c)!=EOF)は
 while((c=fscanf(fin,"%c",c))!=EOF)と書かないとまずいですね。fscanfの戻り値と EOFの比較結果が c に代入され、その値で whileの条件となります。

>2回目のwhileの前に書き足せばOKなんで しょうか?
do ? while で fscanf や fread、fgets、fgetcなどを使って finのファイルポインタが読み進んでいる場合やEOFに達している場合、次のwhile 文中でファイルの最初からもう一度読みたい場合に有効です。
お礼コメント
yabuchanchan

お礼率 60% (108/179)

ちゃんと、見てくださってありがとうございました。
fin=fopenのところ、ご指摘の通りへんですよね?
直します。あと、while((c=fscan(fin,"%c",c))!=NULL)のところも、うっかりしてました。勉強になりました。
ファイル処理にはまだ慣れてないところもあるんで、もっと勉強したいと思います。またわかんないところがあったら、ここで質問たり調べたりして、もっと知識を増やしていきたいです。
投稿日時 - 2002-01-17 18:52:56
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ