Чтение в координатах X & Y, строка за строкой, в C и сохранение их в разных массивах - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь прочитать список разделенных запятыми целых чисел X и Y из файла неизвестной длины и сохранить их в двух массивах.Когда я прихожу распечатать свой массив, я получаю значения, которые вообще не верны.Формат файла, в котором я читаю, выглядит следующим образом:

60,229
15,221
62,59
96,120
16,97
41,290
52,206
78,220
29,176
25,138
57,252
63,204
94,130

Это код, который я получил до сих пор:

#include <stdio.h> 
#include <stdlib.h>
int main()
{


//creating a file pointer
FILE *myFile;
//telling the pointer to open the file and what it is called
myFile = fopen("data.txt", "r");

//variables
int size = 0;
int ch = 0;
    while(!feof(myFile))
    {   
        ch = fgetc(myFile);
            if(ch == '\n') {
                size++;
            }
    }
//check that the right number of lines is shown
printf("size is %d",size);

//create arrays
int xArray[size+1];
int yArray[size+1];
int i,n;
//read each line of two numbers seperated by , into the array
    for (i = 0; i <size; i++) {
        fscanf(myFile, "%d,%d", &xArray[i], &yArray[i]);
    }
//print each set of co-oridantes
    for (n = 0; n <size; n++){
        printf("x = %d Y = %d\n", xArray[n],yArray[n] );
    }

fclose(myFile);
}

1 Ответ

0 голосов
/ 19 октября 2018

Ooh!Это ужасная проблема.

У вас есть этот код, чтобы убедиться, что ваш файл имеет правильный размер;своего рода «проверка отладки».

//variables
int size = 0;
int ch = 0;
    while(!feof(myFile))
    {   
        ch = fgetc(myFile);
            if(ch == '\n') {
                size++;
            }
    }
//check that the right number of lines is shown
printf("size is %d",size);

Но на самом деле это является причиной ошибки, так как она «использует» весь файл, то есть значения никогда не загружаются из файла, и вы простополучить все, что было сохранено в этой памяти заранее.

Чтобы это исправить, удалите проверочный код или добавьте эту строку в конце (до или после printf):

rewind(myFile);

Это возвращает к началу файла, так что вы можете прочитать фактические данные из него.Вы могли бы также использовать:

fseek(myFile, 0, SEEK_SET);

, который делает то же самое.


Пока я в этом, я просто исправлю ваш scanf line:

        fscanf(myFile, "%d,%d\n", &xArray[i], &yArray[i]);

Вам нужен символ в конце строки формата, потому что между строками есть '\n'.

...