Прочитать второе слово файла в c - PullRequest
0 голосов
/ 23 марта 2020

У меня есть эта функция в c, которая сохраняет в целочисленной переменной все числа из файла. Но я хочу внести изменения, чтобы я мог сохранить только вторые числа между пробелами каждой строки в векторе, а затем распечатать весь вектор. Вот пример file.txt:

123  19
321  18
432  9
876  16
875  17

А вот код, который необходимо изменить:

void LerVetor(int *V, int *N) {
        FILE *fp;
        int marks;
        fp = fopen("dados3.txt", "r");

        if(fp == NULL)
                printf("Falha ao abrir ficheiro\n");


        rewind(fp);

        do {
                fscanf(fp, "%d", &marks);
                printf("%d\n", marks);

        }
        while(!feof(fp));


        fclose(fp);

}

Вывод такой же, как file.txt, потому что код просто напечатать мне содержимое файла.

Резюме: сохранить только вторые числа каждой строки, например: 19, 18, 9 ..., в векторе, а затем распечатать вектор.

1 Ответ

0 голосов
/ 25 марта 2020

Попробуйте прочитать файл построчно, используя fgets, и выделите нужную часть каждой строки, используя sscanf. Если вы не знаете длину вектора (= количество строк) перед чтением, вы можете динамически увеличивать вектор с каждой прочитанной строкой, используя realloc:

char line[20];
int *vector = NULL;
int length = 0;

// open file
while(fgets(line, sizeof(line), fp) != NULL) {
    vector = realloc(vector, (length+1)*sizeof(int));
    sscanf(line, "%*d %d\n", &vector[length++]);
}
// close file

Затем вы можете напечатать полученный вектор вот так:

printf("Read %d numbers:\n", length); 
for (int i=0; i<length; i++)
    printf("%d\n", vector[i]);

И конечно же не забудьте free выделенную память.

...