Использование fgets в сочетании со strtok для преобразования ввода в токены - PullRequest
3 голосов
/ 03 апреля 2019

Я читаю ввод из разных текстовых файлов.Эти текстовые файлы представляют собой целые числа, разделенные пробелом, новой строкой или комбинацией пробелов и новых строк.Я хочу преобразовать эти строки в целые числа и использовать их для алгоритма сортировки.

char *line = malloc(BUF_SIZE);
char *token;

struct list* l = list_init();

while (fgets(buf, BUF_SIZE, stdin)) {
    token = strtok(buf," \n");
    printf("%s", token);
}

list_cleanup(l);

return 0;

Что в этом плохого, так это то, что он просто печатает первый элемент каждой строки.Он не обрабатывает несколько элементов в строке.

Заранее спасибо.

1 Ответ

5 голосов
/ 03 апреля 2019

Вам нужно иметь loop для обработки всех токенов.strtok вернет NULL, как только все токены закончатся.

Пример:

while (fgets(buf, BUF_SIZE, stdin)) {
    token = strtok(buf," \n");

    while (token != NULL) { 
        printf("%s", token);
        token = strtok(NULL," \n");
    }
}
...