Функция fscanf () помещает \ 000 при первом чтении символа - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь прочитать файл в следующем формате:

05874121 A 7
07894544 C 3
05655454 B 5
05879544 B 6
05763465 C 2

и присваивать каждое слово различным переменным (dni, model, trash)

Этот код работает в Linux, и я использую CLion для отладки.

char *path = "file.txt";
FILE *f;
int result;
char dni[9], model[1], trash[100];

f = fopen(path, "r");
do {
    result = fscanf(f, "%s %s %s", dni, model, trash);
    printf("DNI: %s\n", dni);
}
while( result > 0);

fclose(f);

Это должно напечатать значения первого столбца, но когда я запускаю программу, вывод просто: "ДНР:" "ДНР:" "ДНР:" ... и т. д.

Во время отладки я понял, что «dni» правильно хранит все числа (как символы), но самый первый элемент, dni [0], всегда: 0 '/ 000' как если бы это был конец строки.

Я не знаю, почему это происходит.

1 Ответ

0 голосов
/ 28 мая 2019

Я сделал 2 исправления в вашем коде:

#include <stdio.h>
int main (int argc, char ** argv) {
        char *path = "file.txt";
        FILE *f;
        int result;
        char dni[9], model[2], trash[100];

        f = fopen(path, "r");
        while(1) {
            result = fscanf(f, "%s %s %s", dni, model, trash);
            if (result < 1) break;
            printf("DNI: %s model %s trash %s\n", dni, model, trash);
        }

        fclose(f);
        return 0;
}

Во-первых, переменная модель [2] должна иметь дополнительный символ для конца строки.

Затем строка«if (result <1) break;». </p>

Вероятно, ошибкой была модель [1] только с одним символом.\ 000 in dni может быть концом строки модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...