使用特殊字符在 c 中解析的一般查询

General query for parsing in c using special character

我们可以编写一个 scanf 函数来解析 # sign and read 上的输入吗 两个数字?

因为#没有以标准方式使用我有点困惑

scanf 模式 "%d#%d" 匹配,顺序为:

  • 可选白色space
  • 一个整数
  • 人物#
  • 多选白色space
  • 另一个整数 如果找到两个整数,它 returns 2。

如果第一个整数和 # 之间有任何东西(即使是 space 字符),扫描将在第一个整数和 return 1 之后停止。它也会停止并且 return 1 如果 # 后面的任何东西不是可能前面有白色 space 的整数。这种不精确是经常不鼓励使用 scanf 的原因之一。

您可以在 # 之前允许白色 space,方法是在模式中添加 space:"%d #%d"。但是 whitespace 包含换行符,这可能会导致意外行为。这是经常不鼓励使用 scanf 的另一个原因。

总结:

  • 是的,您可以让 scanf 读取由 # 分隔的两个数字组成的行。没问题; scanf 没有“合法分隔符”的概念。
  • 如果输入来自 error-prone 源,例如人工打字员,scanf 很难生成良好的错误消息,这可能是一种令人沮丧的体验。但是如果你知道输入是 error-free,scanf 就可以正常工作。

在上面的模式中,如果你想接受浮点数,把%d改成%lf(对于double,一般推荐)或者%f fir floats。