Scanf输入转移到下一个scanf

我在这里有一个代码,在输入带空格的字符串时会有一些不需要的行为。 例如print illegal_argument 。 当有多个单词的输入进来时,我希望它只注册第一个单词。

目前发生的是:

 christian@oblig2 $ print 0 Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000 

它在命令循环中注册第一个用于比较的print 。 但是,而不是scanf提示用户输入下一个输入,而是忽略该操作,并取消用户从前一个scanf输入的第二个字/数字。

我想要发生的是:

 christian@oblig2 $ print 0 Enter router ID for information > 0 ID: 0, flag: f7, model_length: 13, model: D-link y6000. 

一切都按预期工作,但我想知道是否有更简单的方法来做到这一点。 我尝试过使用Strtok,没有太多运气。

 char input[256]; printf("%s@oblig2 $ ", getenv("USER")); scanf("%s", input); if(strcmp(input, "print") == 0) { print(); } 

上面的代码是我从用户那里获得输入的方式。

有人有任何想法吗?

scanf()获取第一个输入值之后,它将其余部分保留在输入流中。 尝试此操作以丢弃剩余的字符:

 int ch; while ((ch = getchar()) != '\n' && ch != EOF) continue; // discard remaining characters 

如果在下一次从stdin读取之前放置这些行,则额外的字符不会损坏您的输入。