首页 > 解决方案 > 结合使用 fgets 和 strtok 将输入转换为标记

问题描述

我正在阅读来自不同文本文件的输入。这些文本文件是由空格、换行或空格和换行组合分隔的整数。我想将这些字符串转换为整数,并将这些整数用于排序算法。

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;

这有什么问题,它只打印每行的第一个元素。它不处理每行多个元素。

提前致谢。

标签: cstdinfgetsstrtok

解决方案


您需要loop处理所有令牌。strtokNULL在所有令牌结束后返回。

例子:

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

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

推荐阅读