2016-08-06 8 views
0

テキストファイルからx座標とy座標を読み取り、それらを多項式回帰に使用する必要があります。私は回帰部分を行うことはできますが、ファイルから値を読み取ることはできません。データポイントはCの.txtファイルからxとyの値を読み取る必要があります

5,10,15,20,25,30,35,40,45,50

17,24,31,33,37,37,40,40,42,41

です

最初の行はxで、2番目の行はyであり、txtファイルにはこのように書かれています。

別の質問から、私はすべての数値を20の単一のx配列に読み込むことができましたが、私はそれらを別々の配列でxとyとして実際に必要とします。これどうやってするの?事前に

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
FILE *data; 
data = fopen("data.txt", "r"); 

int x[20]; 
int i=0; 


for(i=0; i<20; i++) 
    fscanf(data, "%d,", &x[i]); 


for(i=0; i<20; i++) 
printf("x are: %d\n", x[i]); 


fclose(data); 
return 0; 
} 

ありがとう: はここに私の現在のコードです。

+0

なぜ、別の配列で同様のループを使用しないのですか? 'int y [20];あなたはまた、各行に数字が少なくても多くて、エラーチェックなどを追加すると、何が起こるか考える必要があります。 –

+0

is(i = 0; i <20; i ++)fscanf(data、 "%d"、&y[i]); 'それは常に各行に10要素ですか? – artm

答えて

0

質問に記載されているとおり、常に1行に10の整数があり、10行に10の整数がある場合は、int y[10];の配列をもう1つ使用してyの値を格納できます。 2つのループを使用します.1つは10 xの値を読み取り、もう1つは10 yの値を読み取るためのループです。両方の配列には10要素だけを格納するだけです。

しかし
int x[10]; 
    int y[10]; // Array to store y values 
    int i=0; 

    for(i=0; i<10; i++) // Read first 10 values to x array 
      fscanf(data, "%d,", &x[i]); 

    for(i=0; i<10; i++) // Read next 10 values to y array 
      fscanf(data, "%d,", &y[i]); 

    for(i=0; i<10; i++) 
      printf("x are: %d\n", x[i]); 

    for(i=0; i<10; i++) 
      printf("y are: %d\n", y[i]); 

整数の異なる数があるかもしれないという可能性がある場合 - 10よりも多かれ少なかれ - これらのラインで、あなたはより多くのチェックを実行する必要がありますが。

0

チェックは、私はペアでお使いxy値を書くためにあなたをアドバイスすべてが(より論理的と思われるので、実装が簡単です)コンマ

int x[20], y[20]; 
int i, n; 
char tail; 

for(i = 0; i < 20 && 2 == fscanf(data, "%d%c", &x[i], &tail); i++){ 
    if(tail != ',') 
     break; 
} 
n = i+1;//if(n > 20){ puts("bad format!"); return -1;} 

for(i = 0; i < n; i++) 
    fscanf(data, "%d,", &y[i]); 

fclose(data); 

for(i = 0; i < n; i++) 
    printf("(%d, %d)\n", x[i], y[i]); 
0

まずオフに存在します。だから、fscanf(FILE* fp, char* format,...)

1 2 
3 4 
5 6 

:たとえば

  • FILE* fp - ポインタあなたは(scanf()としてfscanf()作業を行いさえ標準stdinことができる)からデータを読みたいストリーミングします。

  • char* format - フォーマット文字列(例:"%d%s%d");

  • ... - 入力されたデータを受け取るメモリ内の変数および/または領域のアドレス。変数の数はchar* formatで指定します。あなたが代わりにあなたがchar* formatに指定するよう、あなたができるだけ多くのデータを得ることを忘れfscanf(data, "%d%d", &x[i],&y[i]);を使用してのfscanf(data, "%d,", &x[i]);を使用

。あなたは空のwhileを残すことができ

while(fscanf(data,"%d%d",&x[i],&y[i]) == 2) { 
    // do something, or don't 
} 

も成功あなたはこのような何かを行うことができますことを意味し、データを入力したのfscanf()などscanf()戻っ番号こと、注意してください。最後に、xyポイントが別々の配列に格納されます。何が起こるのは、fscanf()が2つの整数値を読み込もうとすることです。それ以外の場合は、1を返します(xまたはyが足りない場合)または0(ファイルの終わりの場合)を返します。

関連する問題