【问题标题】:C programming, scanf() functionC 编程,scanf() 函数
【发布时间】:2019-08-04 16:07:35
【问题描述】:

scanf 是否在其缓冲区或输入流中放置空格? 如果我说

scanf("%c %d %d", &character, &num1, &num2);

现在说

scanf("%c", &char2);

我知道 enter 会留在缓冲区中,但空格算吗?

scanf("%c%d%d", &character, &num1, &num2);

这和第一部分有什么不同吗?

还有一件事。 我可以在用户按下回车后以某种方式破坏 scanf 吗?如果它在 num1 之后按 enter 表示 ex。输入:i 5

即使它正在等待另一个输入,我能否以某种方式让 scanf 在此之后停止?

【问题讨论】:

  • 读取整行,然后解析它们,例如使用sscanf

标签: c gcc scanf stdin ansi


【解决方案1】:

scanf 格式字符串中的空格将占用任何空格(如果有);格式说明符%d 也将忽略实际数字之前的任何空格。所以" %d""%d"的效果是一样的。格式说明符%c 不会忽略空格而是读入它们,因此" %c" 将不同于"%c"。在您的情况下,%c 位于scanf("%c %d %d", ...) 格式字符串的开头,其效果与scanf("%c%d%d", ...) 相同。

如果您想在输入所有内容之前允许退出,我建议使用 fgets 读取完整的“行”,然后相应地解析输入,例如使用sscanfstrtok

【讨论】:

  • 你能详细解释一下这个scanf在输入后退出是如何工作的吗?
猜你喜欢
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2013-02-04
  • 1970-01-01
  • 2013-10-16
  • 2013-02-18
相关资源
最近更新 更多