我有一个代码在这里有一些不必要的行为时,输入字符串与空格。例如print illegal_argument
。当有多个单词输入时,我希望它只注册第一个单词。Scanf输入继续到下一个scanf
目前发生的是:
[email protected] $ print 0
Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000
它注册的第一print
在命令循环的比较。但不是scanf
提示用户输入下一个输入,而是忽略该输入,并且从前一个scanf
获取用户输入的第二个单词/数字。
我希望发生的是:
[email protected] $ print 0
Enter router ID for information > 0
ID: 0, flag: f7, model_length: 13, model: D-link y6000.
一切都会按计划,否则,但我不知道是否有做这个简单的方法。我试过使用Strtok,没有多少运气。
char input[256];
printf("%[email protected] $ ", 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(输入,256,stdin)'工作。代码中的其他内容也需要更改。请参阅http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input – chux