2016-11-10 10 views
0

でファイルから(x、y)をcordinatesとして番号を格納私は簡単にアクセスできるので、)。 NUM_PTを取得できましたが、連続した座標を配列に読み込むことができません。 HERE (Iは2次元アレイシステムの形態で<strong>NUM_PT</strong>、すべてそれぞれの座標を格納する必要があるから、私は<a href="http://pastebin.com/jt2etnwE" rel="nofollow noreferrer">Instance File</a>を有する特定の点

はcordinatesは、ファイル内LINE 6 * **から始まるので、私は、私は5にcountを再初期化しようとしたNUM_PTを検索した後

/* Assignment 2 */ 

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <time.h> 
#include <ctype.h> 



#define MAXS 256 

int main(int argc, char *argv[]) 

{ 

    int num_pt; 
    int inputfile = 0, outputfile = 0, i; 

    for (i = 1; i < argc; i++) 
    { 
     if (strcmp (argv[i], "-i") == 0) 
      inputfile = i+1; 
     if (strcmp (argv[i], "-o") == 0) 
      outputfile = i+1; 
    } 
    if (inputfile == 0) 
    { 
     /* invalid command line options */ 
     printf("\nIncorrect command-line...\n"); 
     printf("> %s [-i inputfile [-o outputfile]]\n\n", argv[0]); 
     exit(0); 
    } 

    FILE *fp; 
    fp = fopen(argv[inputfile], "r"); 

    int count = 0;  
    if (fp == 0) 
    { 
     printf("\nCould not find %s\n", argv[inputfile]); 
     exit(0); 
    } 

    char line[MAXS]; 
    while (fgets(line, sizeof line, fp) != NULL) 
    { 
     if (count == 4) 
     { 
     fscanf(fp, "%d", &num_pt); 
     break; 
     } 
     else 
     count++; 

    } 

    int arr[num_pt][1]; 
    while (fgets(line, sizeof line, fp) != NULL) 
    { 
     if (count == 5) 
     { 
      int k, j, cord; 
      for (k = 0; k < num_pt; k++) 
      { 
       for (j = 0; j < num_pt; j++) 
       { 
        while (fscanf(fp, "%d%d", &cord) > 0) 
         { 
         arr[k][j] = cord; 
         j++; 
         } 
       } 
       } 
     } 
    } 
    fclose(fp) 
    return 0; 

} 

をやっていることです。コンパイラubuntu bash script

言語から

ERROR:C99;コンパイラ:「ファイルから(x、y)はcordinatesとして数値を格納する」ためのgcc

+0

ですから、警告とエラーの束を持っています。あなたはそれらを解決するために何をしましたか? –

+0

私が問題を抱えているという警告は、最初と2番目です。 3番目の警告は、出力ファイルを実装する必要がある部分で開始していません。私は 'arr [num_pt] []'を初期化して、2番目のforループで座標をスキャンしながら使用しましたが、使用されていないことがわかります。 –

+0

それで問題は何ですか?あなたが不平を言っている行を見つけることができますか?あなたはそれについて何か間違って見ることができますか?あなたはそこに着く予定の数字はいくつですか?いくつの変数を渡していますか? –

答えて

1

サンプル(読み取り位置を固定しない方がよい)

#include <stdio.h> 

typedef struct point { 
    int x, y; 
} Point; 

int readPoint(FILE *fp, Point *p); 
int readInt(FILE *fp, int *n); 

int main(void){ 
    FILE *fp = fopen("instance10_001.txt", "r"); 
    Point p; 
    int MAX_X, MAX_Y; 

    readPoint(fp, &p); 
    MAX_X = p.x; 
    MAX_Y = p.y; 
    printf("MAX_X:%d, MAX_Y:%d\n", MAX_X, MAX_Y); 

    int NUM_PT; 
    readInt(fp, &NUM_PT); 
    printf("NUM_PT:%d\n", NUM_PT); 

    Point arr[NUM_PT]; 
    for(int i = 0; i < NUM_PT; ++i){ 
     readPoint(fp, &arr[i]); 
     printf("Point(%d, %d)\n", arr[i].x, arr[i].y); 
    } 
    fclose(fp); 
} 

int readLine(FILE *fp, char *buff, int buff_size){ 
    while(fgets(buff, buff_size, fp)){ 
     if(*buff == '#' || *buff == '\n') 
      continue; 
     return 1; 
    } 
    return 0; 
} 

#define LINE_MAX 128 
int readPoint(FILE *fp, Point *p){ 
    char buff[LINE_MAX]; 
    if(readLine(fp, buff, sizeof buff)){ 
     return 2 == sscanf(buff, "%d %d", &p->x, &p->y); 
    } 
    return 0; 
} 
int readInt(FILE *fp, int *n){ 
    char buff[LINE_MAX]; 
    if(readLine(fp, buff, sizeof buff)){ 
     return 1 == sscanf(buff, "%d", n); 
    } 
    return 0; 
} 
+0

私はcで 'struct'宣言を学んでいません。これは私を助けてくれました。私は自分の割り当てに役立つと思うので、 'struct'についてもっと学びたいと考えています。ありがとうございました。 –

+0

使用例2次元配列 'int arr [num_pt] [1];' - > 'int arr [num_pt] [2];' – BLUEPIXY

+0

私の配列型に 'int arr [ num_pt] [1] 'またはあなたの方法は、この質問に近づくためのより良い方法ですか? (i = 0; i)にアクセスすることができます。これは、次のようになります。 –

関連する問題

 関連する問題