О чтении строк из файла в C - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно прочитать файл с определенным шаблоном: у него всегда будет «Буква (один символ) Числовое число Числовая строка» Например: A 20 22 2340 HELLO WORLD Так что я пытаюсь поместить каждую вещь вотдельный элемент моего списка.

Я знаю, как получить первый символ и 3 числа и поместить его в новую переменную, но я не знаю, как получить только окончательную строку.Если я использую fgets, он получит всю строку и, если я использую fscanf, он получит первое слово, но после пробела ничего не получит.Как я могу прочитать только строку и сохранить ее в новой переменной?

    int a, b, c, x, k = 0;
    FILE *file;
    file = fopen("Test.txt", "r");
    while (fgets(buffer, 100, file) != NULL){
     sscanf(buffer, "%c %i %i %i ", &a, &b, &c, &x);
     Events.Key = k;
     Events.Event = a;
     Events.Day = b;
     Events.Month = c;
     Events.Year = x;
     Insertion(Events, Data); //call my function to insert in the list
     k++;
}

В этом коде я могу получить значение из (моего предыдущего примера) A 20 22 2340, но, если я добавлю другое% s и строка в sscanf, он получит только "HELLO" и, если я использую fgets, он получит всю строку.Как я могу получить всю строку, включая пробелы?Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Понял, ребята, я использовал [^ \ n], я не знал об этой функции, спасибо!

0 голосов
/ 02 июня 2019

Вы можете использовать спецификатор набора строк %[], который останавливает сканирование там, где вы говорите. Обратите внимание, что fgets() сохраняет завершающий символ новой строки, поэтому на этом удобно остановиться и отфильтровать его.

char name[50];
if(sscanf(buffer, "%c %i %i %i %49[^\n]", &a, &b, &c, &x, name) != 5)
    {
    // handle error
    }
printf("%s\n", name);

Обратите внимание на ошибку типа для %c в комментариях.

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