я пытаюсь прочитать файл на языке c, структура файла находится в массиве, и я должен разделить его на массив x[] и y[]

#c

#c

Вопрос:

Мой код состоит в том, чтобы найти номер строки, а затем напечатать в нем весь элемент, но он выдает мусорное значение, и главное, что нужно сделать, это отделить переднюю строку как x и y соответственно, пожалуйста, помогите мне отделить x[] = [60,15,62…..] и y[] = [229,221,59,….]

Набор данных — это

 60,229
15,221
62,59
96,120
16,97
41,290
52,206
...
 

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

int main(){

    FILE *myFile;
    myFile = fopen("datasetLR1.txt", "r");
    int count=0;
    char c;
    for (c = getc(myFile); c != EOF; c = getc(myFile)) {
        if (c == 'n'){
            count = count   1; 
        }// Increment count if this character is newline 
            
    }
    
    int numberArray[count*2];
    int i;

    if (myFile == NULL){
        printf("Error Reading Filen");
        exit (0);
    }

    for (i = 0; i < count*2; i  ){
        fscanf(myFile, "%d,", amp;numberArray[i] );
    }

    for (i = 0; i < count*2; i  ){
        printf("Number is: %dnn", numberArray[i]);
    }

    fclose(myFile);

    return 0;
}
 

Комментарии:

1. if (myFile == NULL) Я надеюсь, что это никогда не будет правдой, поскольку вы полностью проигнорировали проверку этого самого условия перед предыдущим циклом. Однако ваш файл находится в EOF при выходе из этого цикла, и вы ничего не сделали, чтобы изменить это условие (т. Е. Перемотать назад). И поскольку ваши fscanf вызовы никогда не проверяются (возвращаемое значение этой функции предоставляется по какой-то причине; используйте его), ваш код не обращает внимания на 2*count количество неудачных сканирований из указателя файла, который все время находится в EOF .

Ответ №1:

После того, как вы подсчитаете количество строк в файле с помощью вашего первого цикла for, вы должны использовать rewind(myFile); . Это возвращает вас к началу файла. Без этого вы считываете конец файла, который создает значения мусора. Кроме этого, ваш код работает нормально.

Вы также должны посмотреть на выполнение fscanf("%d,%dn", amp;x, amp;y); , которое должно считывать оба числа одновременно (и новую строку) и присваивать им значения x и y соответственно. Это должно значительно упростить ваш код, однако ваш код отлично работает без него.

Комментарии:

1. вы имеете в виду ` amp;x, amp;y`