• 締切済み

教えてください。(改行について)

データ 0.29498E-07 0.20257E-07 0.66597E-08 0.63194E-09-0.64569E-07-0.15007E-06改行 -0.27140E-06-0.32665E-07 0.76314E-07 0.11055E-06 0.13775E-06 0.16317E-06 上記のデータが入ったファイルをfoprnでテキストデータとして読み,C[l]という配列に格納したいと考えています。 そこで下記のプログラムを書きました。 FILE *fp; long l; char data[12]; long number; for(l=0;l< number;l++){ fread(data,12,1,fp); c[l]=atof(data); } しかし、改行の部分を正しく読めていません。どこを訂正すれば良いかわかりません。 可能であれば教えていただけないでしょうか? よろしくお願いいたします。

みんなの回答

noname#208507
noname#208507
回答No.5

想像ですが、1つの数値文字列が12バイト固定長のデータを読みたいということで合っているでしょうか? なら、いつも12文字ずつ読み込んでいる点が間違っているのです。6番目のデータ(つまり行末)は改行を含めて13文字以上読み込まないと、次のデータを読み込むとき1文字ずれてしまいます。 例えばこう。 FILE *fp; long k,l; char data[12+1]; int loop = 1; l = 0; while (loop) { cancel: for (k = 0; k < 12; k++) { if (fread(&data[k], 1, 1, fp) == 1) { if (data[k] == '\r' || data[k] == '\n') goto cancel; /* 改行なら読み捨て */ } else { loop = 0; } } data[k] = '\0'; c[l] = atof(data); l++; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

改行に何の意味があるんだろう.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

fread()よりも、1行まるごとfgets()して、sscanf()あたりで取り出すのが 無難な気がします。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

freadで12文字いっきに読むのではなく、「1文字ずつ読む。改行だったら無視する。12文字になるまで繰り返す」ようにしたらどうでしょう? あと char data[12]; に12文字入れたら\0が入らないので、atofが変な結果を返すことが考えられます。 ところで、longなのはなにか意図があるのでしょうか?

  • f272
  • ベストアンサー率46% (8477/18147)
回答No.1

改行が2バイトだったというおち?

関連するQ&A