Чтение «нефиксированного» числа целых чисел после точки с запятой из файла в c - PullRequest
0 голосов
/ 19 марта 2019

Как лучше всего использовать sscanf или любую другую команду для чтения из файла после точки с запятой, например, если мой файл имеет 5: 4 5 6 7. Как я могу сохранить значения после двоеточия в массиве.Кроме того, число целых чисел может меняться после точки с запятой, т. Е. В приведенном выше примере они равны 4, но могут быть 5, 3 или 10. Как лучше всего справиться с этим.

1 Ответ

0 голосов
/ 19 марта 2019

Все числа, находящиеся в одной строке, облегчают задачу. По сути, вы хотите прочитать строку, используя fgets(), и разбить ее на отдельные числа, разделив пробел, и преобразовать каждое из этих слов в целое число. Есть множество способов сделать это, но мне нравится использовать преимущество того, как strtol () будет записывать, где конец преобразованного числа состоит в объединении двух шагов в один. Что-то вроде:

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

int main(void) {
  char line[] = "5: 4 5 6 7";
  char *curr = line;

  while (*curr) {
    char *end;
    int n = strtol(curr, &end, 10);
    if (curr == end) {
       fputs("Found something not a number!\n", stderr);
       return EXIT_FAILURE;
    } else if (*end == ':') {
      printf("Line header: %d\n", n);
      end++;
    } else {
      printf("Number %d\n", n);
    }
    curr = end;
  }
  return 0;
}

Компиляция и запуск это производит:

Line header: 5
Number 4
Number 5
Number 6
Number 7

Вы, конечно, сохраните числа в массиве, а не просто распечатаете их, но это должно дать вам общее представление.

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