c - Scanf 输入结转到下一个 scanf

标签 c input 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 读取之前,额外的字符将不会破坏您的输入。

关于c - Scanf 输入结转到下一个 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840207/

相关文章:

javascript - 手机输入栏 : automatically push to top on select

c++ - 无法从/dev/input/eventx 读取原始键盘事件

c - 关闭标准输出后打开的文件的 POSIX 定义缓冲是什么?

c - 获取终止我的进程的 "User signal 1",C 中的 UNIX

c - 将 float 放入二维数组中

c++ - SDL fscanf 函数问题

c - 如何在 C 中计算整数数组元素(例如基于 char 的 strlen())?

c - 为什么 char * malloc 给我一个 scanf 的段错误?

c - 这是编译器仅通过使用位运算来划分的方式吗?

c - 最后一个整数提升规则是如何在 C 中应用的?