【发布时间】:2016-10-03 20:50:50
【问题描述】:
我这里有一个代码,它在输入带空格的字符串时会出现一些不需要的行为。例如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,而是使用fgets。 -
@OlafDietsche 尝试
fgets(input, 256, stdin)不起作用,除非我做错了什么。尝试$ print会产生: command not found.。 -
@Christian S
fgets(input, 256, stdin)有效。代码中的其他内容也需要更改。见stackoverflow.com/questions/2693776/…