我在这里有一个代码,在输入带空格的字符串时有一些不需要的行为。例如position = profile.positions.build(position_params)
。当有多个单词的输入进来时,我希望它只注册第一个单词。
目前发生的事情是:
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
一切都按预期工作,但我想知道是否有更简单的方法来做到这一点。我尝试过使用Strtok,没有太多运气。
christian@oblig2 $ print 0
Enter router ID for information > 0
ID: 0, flag: f7, model_length: 13, model: D-link y6000.
以上代码是我从用户那里获得的输入。
有人有任何想法吗?
答案 0 :(得分:2)
在scanf()
获取第一个输入值后,它将其余部分保留在输入流中。试试这个以丢弃剩余的字符:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
continue; // discard remaining characters
如果您在stdin
的下一次阅读之前放置这些行,则额外的字符不会损坏您的输入。