我这里有一段代码,在输入带空格的字符串时会出现一些不需要的行为。例如 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
读取之前,额外的字符将不会破坏您的输入。
我是一名优秀的程序员,十分优秀!