c - 如何在c中输入两个空格分隔的单词,有时可以省略一个单词
问题描述
我想做的是在C中输入两个单词,但有时可以省略一个单词。更准确地说,必然只有一个词,而其他词的数量可能会有所不同。可以是零,一,二或三 作为一个例子,有时输入可以是
你好世界
虽然有时它可能只是
你好
我希望这样做的原因是我在一个while循环中输入(我必须连续输入并根据它们进行处理)我用过
"%s %[^\n]%*c"
但它会等到我输入另一个单词。(因为它期待空格后的另一个词)
我尝试了谷歌搜索和 scanf 的所有方面,但没有找到任何解决方案。任何帮助表示赞赏!谢谢...
解决方案
这是一个不使用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 版本不同的版本。