• ベストアンサー

ファイルから1行ずつ読み込み

とても基礎なことかもしれませんが、質問させてください。 あるファイルに 1 23 3 4 53 3 32 89 7 4 5 3 4 3 4 5 6 7 といった数字の列が入っていて、 それを1行ずつ、読み込み、配列A[]に代入するにはどうすればよいでしょうか? 例えば上の例では、 A[0]には1、A[1]には23、A[2]には3・・・という感じで代入して処理を行った後、2回目は A[0]には32、A[1]には89、A[2]には7・・・ として処理を行う、といった作業を繰り返したいです。 for (i=0;;i++){  fscanf(fp,"%d",&j);  if(j == '\n') break;  s[i] = j; } としたのですが改行が判別できないらしく、1行はなく最後まで読み込まれてしまいます。

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

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

案1 ANo1.で説明されているように、まじめにやる。 案2 1行の最後の数の後に(空白が挟まることなく)改行が来るのなら、こういう手も使える。 char ch; for (i=0;;i++){   fscanf(fp,"%d%c",&j, &ch);   if(ch == '\n') break;   s[i] = j; } 案3 空白/改行の読み飛ばしをscanfに行わせずに自分でやる。 だいたいこんなかんじ。 int ch; for (i=0;;i++){  fscanf(fp,"%d",&j);  s[i] = j; do{ ch=getc(fp); }while(isspace(ch)&& ch!='\n'); if(ch=='\n') break; ungetc(ch,fp); } これに加えて、EOFが来たところで抜ける処理が必要です。 なお、ファイルに数字と空白と改行以外の文字は絶対に入ってない(タブも入ってない)のなら、 }while( ch==' '); でいいとおもいます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

fgets などで一行単位でファイルから読込み 配列には、読み込んだ1行からsscanf してはどうでしょうか