我正在编写一个支持“新”命令的游戏,我的想法是,当我尝试验证它们时,我需要确保在给出命令之后,除了字符串中的空字符之外别无其他。我试过用这个:
if(sscanf(command, "flag (%1c,%d)%c", &x1, &y1, &nullChar)) == 3) {
...
}
但是,sscanf将始终返回2,这意味着nullChar验证无效。我该如何验证?我非常感谢你的帮助,谢谢!
答案 0 :(得分:3)
sscanf()
无法扫描'\0'
。
int sscanf(const char *s, const char *format, ...);
扫描char
s
的每个'\0'
,直至遇到'\0'
,然后扫描停止而不对format
'\0'
进行测试。
相反,要检测扫描是否停在int n = 0;
if ((sscanf(command, "flag (%1c,%d)%n", &x1, &y1, &n)) == 2) &&
(command[n] == '\0')) Success();
:
scanf()
[编辑@Jonathan Leffler建议]
每当"flag (%1c,%d"
返回值为2时,就会知道扫描通过"flag (%1c,%d)"
进行扫描最少,但不一定是n = 0
。通过设置n
,如果"flag (%1c,%d)"
完全超过')'
,则n
将仅为非零。由于输入流中缺少command[n] == '\0'
而导致扫描停止,n
将为0且失败"flag (%1c,%d)"
。对于{{1}}的非零值,我们可以轻松测试是否有额外的垃圾{{1}}。