【发布时间】:2018-11-04 22:06:39
【问题描述】:
我需要在我的 C 程序中输入scanf。我是这样做的:
scanf("{[ %lf; %lf],[ %lf; %lf],[ %lf; %lf]}", ...)
但它不适用于某些预期的输入。它必须有效。对于
{[0;0],[10;10],[15;15]}
以及对于
{ [ 4 ; -1 ] , [ 7 ; 1.5],[4; 4] }
或
但如果某些{ } ; , [ ] 缺失或多余,则需要printf("Bad input.\n")。
【问题讨论】:
-
这看起来像是一个问题,如果一个简单的解析器一次获取每个标记,它会更好地解决这个问题。
-
有一门课程添加了这种语法。这至少是该主题的第五个问题。一个相关的问答是Trying to tweak
sscanf()to ignore\nand\t。基本上,在格式字符串中必须逐字匹配的每个字符之前放置一个空格 —scanf(" { [ %lf ; %lf ] , [ %lf ; %lf ] , [ %lf ; %lf ] }", …),其中%lf转换规范之前的空格是可选的但对称的(%lf无论如何都会跳过空格)。另一个问题使用sscanf(),但问题类似。 -
如果您在任何地方放置空格,例如
int n = scanf(" { [ %lf ; %lf ] , [ %lf ; %lf ] , [ %lf ; %lf ] }", . . .);,那么您的示例都可以工作,并且scanf返回6,您必须始终检查。编辑 - 不是第一个观察到这一点的人。 -
关于SO的多个问题都在询问这种数据格式,包括:stackoverflow.com/questions/53145987; stackoverflow.com/questions/53132823; stackoverflow.com/questions/53042562; stackoverflow.com/questions/53042562; stackoverflow.com/questions/53037182; stackoverflow.com/questions/53034556 — 所有这些都以一种或另一种形式询问相同的“2018 年秋季新 SO”数据格式。
-
@RobertHarvey:不,它不是(相当)JSON。 JSON 将使用逗号,其中使用分号。请参阅:json.org。
标签: c validation input scanf