使用特殊字符在 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。
我们可以编写一个 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。