【发布时间】:2017-01-28 23:58:25
【问题描述】:
我正在尝试使用 sscanf() 来验证命令行输入
我只想要像 1、0.1、0.111 这样的东西通过, 不是 a12 12a 或 1.2a
我试过了
if (sscanf(input, "%f", &val) != 1) { // to check for 1 successful conversion
printf("invalid input");
}
但我似乎也让无效输入通过。
有什么建议吗?
【问题讨论】:
-
不要给
scanf()打两次电话。if()不是测试第一个是否成功,而是在它之后进行第二次扫描。 -
这实际上不是我的代码的样子。我只是想帮助读者理解。我只有第二行
-
显然它并没有帮助我理解。发布您的实际代码、您期望的结果以及您得到的结果。
-
scanf不是严格的解析器。它只是一个快速而肮脏的解析器,对一次性代码很有用。如果您想要严格解析,请查看strtok、strtol和strtod。 -
我建议接受输入,不管它是什么,作为一个字符串,然后测试它。