我这里有一个代码,它在输入带空格的字符串时有一些不需要的行为。例如print illegal_argument
。当输入多个单词时,我希望它只注册第一个单词。
目前的情况是:
christian@oblig2 $ print 0
Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000
它将第一个
print
注册为命令循环中的比较。但它并没有提示用户输入下一个输入,而是忽略了这一点,并从上一个输入中获取用户输入的第二个单词/数字。我想发生的是:
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
读取之前,额外的字符不会损坏您的输入。关于c - Scanf输入会结转到下一个scanf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39840207/