- ベストアンサー
文字、(ホワイト)スペース、数値の混在したデータの読み込み(C言語)
Initial time 01:05 date 00/01/01 name a:2 b:3 10 20 30 ・ ・ ・ 上記のようなテキストファイルで、6行目以降の数値を配列に格納して統計処理を考えています。自分ではfgetsが行の終端まで読むのを利用して、まず十分な長さのchar型配列を5つ用意し、1行目~5行目まではそれに格納し、6行目以降はfscanfで読む事を考えたのですが、printfで表示させると格納した文字や、計算の結果期待できる数値と異なる表示になってしまいます。良い方法があれば教えて頂きたく存じます。よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>fgetsとfscanfは一緒には使えないのでしょうか? 使用できますが、混在した使い方を私は勧めません。 但し、出来ないわけではないので貴方のやり方が間違っているわけではありません。 一緒に使うのであれば、以下の点をチェックしてみて下さい。 1.fgetsの読み込み領域は十分大きく取っていますか。又、そのサイズは正しく指定していますか。 (改行まで読み込んでいない可能性がありますから) 2.fscanfの書式は"%d"でしょうか。また、そのデータを格納する領域はint型でとっていますか。 3.fscanfを実行時の戻り値はどのような値が返りますか。
その他の回答 (1)
- tatsu99
- ベストアンサー率52% (391/751)
6行目以降の処理がうまくいかないということでしょうか。もしそうであれば、6行目以降は、fgetsで読んだ内容をatoi又はatolで整数に変換すれば、数値(10,20,30)が取得できます。
お礼
早速のご回答ありがとうございます。 >6行目以降の処理がうまくいかないということでしょうか。 はい、そうです。説明が不足していてすいません。最初の5行(空行含む)は最悪捨ててしまっても良くて、6行目以降の数値データ同士のみの統計処理を行い、その結果を別のファイルに書き込む事を考えています。fgetsとfscanfは一緒には使えないのでしょうか?
お礼
度々のご回答ありがとうございます。 無事に読み込み&計算できました。原因は1.の読み込み領域が少なすぎた事でした。大きな領域を用意してみたところ正常に動作しました。 2.は一応"%d"でとっています。 3.は"1"が返ってきました。 本当に助かりました。ありがとうございました。