C: Scanf 验证

标签 c

说我有

[房间数]

[房间名称] [item1的数量] [item2的数量]

...

[门的数量]

[房间名称] [L|R|U|D] [房间名称]

...

[开始房间] [退出房间]

[移动1]

[移动2]

....

假设我正在使用 scanf,

scanf(" %d", &roomCount);

scanf(" %s %d %d", room_name, &item1No, &item2No);

等...

我如何验证用户输入的内容是否正确?

谢谢

最佳答案

使用 scanf 几乎总是一个坏主意:它不区分换行符和其他空格,这使得无论您尝试解析什么都不知道您在哪里.可能更好:使用 fgets 读取行并将每一行提供给 sscanf,检查返回值以确保您得到了您要查找的内容。或者,使用实际的解析器:使用像 flex 这样的解析器生成器制作您自己的解析器,或者使用某种 XML 作为您的数据格式并使用 XML 解析器,等等。

设计您的数据格式可能是明智的,这样就很难在不注意的情况下不同步地进行解析,并使数据的结构对人类读者来说更加明显。

关于C: Scanf 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570231/

相关文章:

c - 带有连续分隔符的 strtok_s 行为

c - openCV k-means 调用断言失败

c - 冒泡排序程序,适用于 DM 编译器(在 Windows 上)而不适用于 GCC(Ubuntu)

将字符串数组复制到另一个字符串数组 - C

c - 如何克服错误代码-11 cl_build_program_failure

c - sigfillset 是什么意思?在我的实现中我真的需要它吗?

c - 未设置的 C 指针不为空

c++ - 导出制造商、符号可见性……?

c - 为什么 "*(&arr+4)"与 "&arr[4]"不同?

c - -mtune=i486 和 -arch=i486 有什么区别