Sscanf - прочитать все числа из файла - C - PullRequest
1 голос
/ 18 января 2020

Я хотел бы прочитать все числа из файла .txt, используя sscanf. В основной функции я открыл файл .txt с fopen( name.txt, "r"). Следующий код читает только первые строки и первые числа, но я не могу повторить его:


    int test(FILE *file){
    int l = 0;
    char buffer[256];
    char *poi = NULL;
    while(fgets(buffer, 256, file) != NULL){
        poi = buffer;
        for(;*poi != '\n'; poi++){
            sscanf(buffer, "%[^0-9]%d", zahl[l].buf, &zahl[l].number);
            l++;
        }
    }

Например:

В файле .txt есть следующий текст:

In 2019 we had 200 accidents
In 2020 we had 199 accidents

Приведенный выше код будет читать только 2019 и 2020, но не 200 или 199 - как я могу сказать sscanf продолжать сканирование до появления новой строки '\n'?

1 Ответ

2 голосов
/ 18 января 2020

Пара вещей:

  • Вы всегда сканируете с самого начала buffer, вам нужно сканировать с poi (точка интереса?)
  • Вам нужно продвинуться poi на количество прочитанных символов
  • Символ новой строки может отсутствовать в buffer

Для второго пункта вы можете использовать %n для получите количество прочитанных символов.

На этом вы заканчиваете al oop вроде:

    while (*poi) {
        int nc;
        if (2 == sscanf(poi, "%[^0-9]%d%n", zahl[l].buf, &zahl[l].number, &nc))
            poi += nc;
        else
            break;
        l++;
    }
...