sscanf()在C中的while循环中

时间:2012-11-05 02:59:37

标签: c scanf

我有一个字符串input,其中包含由空格分隔的单词。我想使用sscanf()分割单词,将每个单词存储在input_word中并打印出来,但我不确定如何将其放入while循环中。

这就是我所拥有的:

 char input[max];
 char split_input[max];

 /* input gets populated here */

 while (sscanf(input," %s", split_input)) {
     printf("[%s]\n", split_input);
 }

一旦序列中的最后一个字被分割,终止循环的条件是什么?

3 个答案:

答案 0 :(得分:4)

你在那里使用了错误的功能。我可能会建议strtok()吗?

请在此处阅读strtok

答案 1 :(得分:4)

可能无法涵盖所有​​角落案件。

#include <stdio.h>

int main(void)
{

    char *input = "abc def ghi ";
    char split_input[sizeof input];
    int n;

    while (sscanf(input," %s%n", split_input, &n) == 1) {
        printf("[%s]\n", split_input);
        input += n;
    }
}

答案 2 :(得分:0)

我还建议使用 strtok() 功能。它会对您的字符串进行标记,并允许您在循环中逐个提取单词。这是一个示例,假设input是您定义的字符串,我编写了一个执行此操作的函数。

#include <stdio.h>
#include <string.h>

int tokenize(char *input) {

    const char space[2] = " ";
    char *token = strtok(input, space);
    while (token != NULL) {
        token = strtok(NULL, space);
        printf("%s\n", token);
    }

    return 0;
}