Re: ファイルからのデータ読み込み
鴻池です。
"h.o" <gaster11@poplor.ocn.ne.jp> wrote in message
news:bj1dsh$cco$1@news-est.ocn.ad.jp...
> プログラム2(ファイル読み込み部)
> void file_read(void){
>
> FILE *fp;
>
> char buff[20];
>
> line_no = 0; /* 行数カウンター(グローバル)初期化 */
>
> if((fp = fopen(FILE_NAME,"r")) == NULL){
> printf("ファイルが存在しません");
> exit(1);/* ファイルが無ければプログラム終了 */
> }
>
> while(1){
> if(fgets(buff,sizeof(buff)-1,fp) == NULL) break;
>
> if( buff[0] == '\n' ) break; ← 「問題の行」 A
>
> if(line_no == MAX_DATA){
> printf("%d 行に達しましたので読み込みを中止します \n",MAX_DATA);
> break;
> }
>
> data[line_no] = atoi(buff); /* 文字列を整数に変換 */
>
> line_no = line_no + 1; /* 行番号をインクリメント */
>
> }
>
> fclose(fp); /* オープンしたファイルを閉じる:必修 */
> }
>
> 問題点
>
> プログラム2で、Aの位置に
> if( buff[0] == '\n' ) break;
> という行を入れてありますが、この行を入ると、ファイルを読み込まずに終了して
> しまう場合がありました(ファイル末端で改行コードだけの行が来たら終了させる
> 目的のために入れたコードです。)
>
> 要するに、ファイルの先頭に改行コードが入っているという
> 事になるのですが、、、、プログラム1で作成したファイルを見ても
> ファイルの先頭に改行コードが来た形跡は無く ? という状態です。
プログラム1にしても,2でもよく分らないのですが,2について言えばやたら
breakが多くてなぜそんなに必要なのか理解し難い感じで゜す。で,疑問なのは,
「要するに、ファイルの先頭に改行コードが入っているという事になるのですが」と
いうのは,何を根拠にそう判断したのて゜しょうか。とりあえず,fgetsの仕様をよ
く読んでみると疑問も解決するように思いますが。(プログラムがどこで終了してい
るかdebagなりprintfなり挿入して確認すれば,分ると思いますが。)
--
******************************
keizi kounoike
******************************
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735