Scanf输入转移到下一个scanf
我在这里有一个代码,在输入带空格的字符串时会有一些不需要的行为。 例如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
读取之前放置这些行,则额外的字符不会损坏您的输入。