2016-11-10 81 views
0

我有一个Instance File从中我需要存储NUM_PT并在2D阵列系统的形式所有相应坐标(个人选择,所以我可以轻松访问它们)。我能够检索到NUM_PT,但我坚持将连续的坐标读入我的数组中。在特定点从文件存储号码为(x,y)的cordinates

这里是我做了什么

/* 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; 

} 

检索NUM_PT我试图重新初始化count到5后,因为cordinates从** LINE 6 *文件中启动。

ERROR FROM编译ubuntu bash script

语言:C99;编译器:GCC

+0

所以你有一堆警告和错误。你已经做了什么来解决它们? –

+0

我遇到的警告是第一个和第二个。第三个警告我还没有开始执行输出文件的部分。我初始化了'arr [num_pt] []',并在扫描坐标时在我的第二个for循环中使用它,但它告诉我它没有被使用。 –

+0

那么麻烦是什么?你能找到它抱怨的路线吗?你能看到有什么不对吗?你期望有多少号码到达那里?你传递给它多少个变量? –

回答

1

样品“存储号码从一个文件(X,Y)cordinates”(最好是不固定的读取位置)

#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

案例使用二维数组,'诠释ARR [num_pt] [1];' - >'INT ARR [num_pt] [2];' – BLUEPIXY

+0

你是说,我将能够访问我的数组类型为'INT ARR [ num_pt] [1]'还是你的方法是替代品,并且是解决这个问题的更好方法? –

相关问题