如何使用 scanf 验证用户输入。现在我有这样的东西,但不起作用。
注意:我有 atoi 只是为了验证 scanf 验证是否有效。
scanf("%[0987654321.-]s",buf);
i = atoi(buf);
if(i)
index = i;
最佳答案
使用 scanf()
通常不是用户输入的好主意,因为失败会将 FILE
指针留在未知位置。那是因为 scanf
代表“扫描格式化”,并且未格式化比用户输入多一点。
我建议使用 fgets()
获取一行,然后在字符串上使用 sscanf()
来实际检查和处理它。
这还允许您检查字符串中是否包含您想要的字符(通过循环或使用正则表达式),而 scanf
函数系列并不真正适用于此。
例如,将 scanf()
与 "%d"
或 "%f"
一起使用将在第一个非-number 字符,因此不会捕获像 "127hello"
这样的尾随错误,它只会给你 127。将它与无界 %s
一起使用只是 乞求缓冲区溢出。
如果你真的必须使用 []
格式说明符(在 scanf
或 sscanf
中),我不不要认为它后面是 s
。
并且,对于使用该建议的稳健输入解决方案,请参阅 here .一旦您将输入行作为字符串,您就可以sscanf
到您满意的位置。
关于c++ - 如何使用 scanf 验证输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456303/