プロが教えるわが家の防犯対策術!

配列のファイル読み込みの方法が分かりません。一応次に示すプログラムまで作りました。

1       23
2       40
3        :
4        :
:        :
:        :
5000    4098

というテキストファイルを読み込んで、出力したいです。



#include <stdio.h>

int main(void){
FILE *fp;

double x[5000];
double y[5000];

if((fp=fopen("demo-10mTorr-30W.txt","r"))==NULL){
printf("ファイルが開けません\n");
}

while(fgets(x,5000,fp)!=NULL){
printf("%f %f\n",x,y);
}
}
fclose(fp);

return 0;
}


・分からない点
配列の読み込み方。

またこれを実行した場合、全て0が出力されてしまいます。




よろしくお願いします。

A 回答 (5件)

fgets() は「一行」を「文字列」に格納するので、それを自前で分解して下さい。

    • good
    • 0

ヒント: scanfファミリー



>printf("%f %f\n",x,y);

x, yは配列の先頭アドレスを表すので、タイプが一致してません。
    • good
    • 0

さらに付け加えると、ファイルをオープンできなかったときにも


中身を読もうとしている点に問題があります。
    • good
    • 0

数値と数値の間の空白が1つだという前提で文字列を分解してみました。


結構面倒な…。
こんな感じですかねー?


char s[5000], sx[5000], sy[5000];
int i, n;
/* ↑必要な宣言を追加しました↑ */

fgets(s, 5000, fp);
for(i = 0; i < 5000; i++){
 if(s[i] == ' ' || s[i] == '\t'){
  strncpy(sx, s, i);
  sx[i] = '\0';
  x[0] = atof(sx);
  n = i+1;
 }
 else if(s[i] == '\n'){
  strncpy(sy, &s[n], n-i);
  sy[n-i] = '\0';
  y[0] = atof(sy);
  break;
 }
}
    • good
    • 0

☆ float → %f  double → %lf



 http://www.k-cube.co.jp/wakaba/server/format.html
---------------------------------
>というテキストファイルを読み込んで、出力したいです。

 「だけ」でしたら、「配列」は必要ありません。

☆レコード(行)を、\n までの文字列として読み込み、そのまま出力するだけ。

 char cBuf[256];   256 は、レコードの最長よりも大きいこと。

 while( NULL != fgets( cBuf, 256, fp ) ){ 1行ずつ読み込む、256 は「文字数」

  printf( "%s", cBuf ); 改行の \n は cBuf の末端に(読み込まれて)入っている。
 }
 http://www.bohyoh.com/CandCPP/C/Library/fgets.html
---------------------------------
>配列の読み込み方。

 配列「へ」の読み込み方。・・ですよね(=配列へ格納)。

☆5000行全てを読み終えてから、(何らかの処理をし)、出力するのであれば「配列」が必要。

 データが整数である場合、

    int iX[5000], iY[5000], nn = 0, i;

    while( EOF != fscanf( fp, "%d %d", &iX[nn], &iY[nn] ) ){

      nn++; ( 5000 over チェック省略)
    }
    (何らかの処理)

    for( i = 0; i < nn; i++ ){

      printf( "%4d %4d\n", iX[i], iY[i] );
    }

 データが実数である場合、

    int nn = 0, i;
    float fX[5000], fY[5000];

    while( EOF != fscanf( fp, "%f %f", &fX[nn], &fY[nn] ) ){

      nn++;
    }
    (略)

 http://www.bohyoh.com/CandCPP/C/Library/fscanf.h …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!