首页 > 解决方案 > 如何在c中输入两个空格分隔的单词,有时可以省略一个单词

问题描述

我想做的是在C中输入两个单词,但有时可以省略一个单词。更准确地说,必然只有一个词,而其他词的数量可能会有所不同。可以是零,一,二或三 作为一个例子,有时输入可以是

你好世界

虽然有时它可能只是

你好

我希望这样做的原因是我在一个while循环中输入(我必须连续输入并根据它们进行处理)我用过

"%s %[^\n]%*c"

但它会等到我输入另一个单词。(因为它期待空格后的另一个词)

我尝试了谷歌搜索和 scanf 的所有方面,但没有找到任何解决方案。任何帮助表示赞赏!谢谢...

标签: cstringinputwhile-loopscanf

解决方案


这是一个使用scanf()非常简单的情况:

char line[1024];

while (fgets(line, 1024, stdin)) 
{
    char *word = strtok(line, " \t\n");
    while (word)
    {
        // do something with word
        word = strtok(0, " \t\n"); // <- next word
    }
}

至于scanf()以及如何/为什么不使用它,我建议阅读我的初学者指南,远离scanf().


旁注:strtok()不是线程安全的。如果这是一个问题,可以使用 POSIXstrtok_r()或 C11等替代方案strtok_s()。注意微软也有一个strtok_s()与标准 C 版本不同的版本。


推荐阅读