【发布时间】:2016-05-15 19:41:05
【问题描述】:
我想编写一个代码来确保用户只输入一位数字。如果用户输入“0 1 3”之类的内容,我希望我的程序读取一条我不知道该怎么做的错误消息。任何人都知道如何解决这个问题?如果用户输入一堆中间有空格的数字,我当前的代码只接受第一个数字。
请在下面查看我的代码。谢谢:D
//Prompt the user to enter the low radius with data validation
printf("Enter the low radius [0.0..40.0]: ");
do
{
ret = scanf("%lf", &lowRadius);
//type validation
if (ret != 1)
{
int ch = 0;
while (((ch = getchar()) != EOF) && (ch != '\n'));
printf("Wrong input. Please enter one numerical value: ");
}
//range validation
else if((lowRadius < 0 || lowRadius > 40))
{
printf("Incorrect value. Please enter in range 0-40: ");
}
else break;
} while ((ret != 1) || (lowRadius < 0 || lowRadius > 40));//end while lowRadius
【问题讨论】:
-
你已经有代码了。使用
getchar从输入中读取,直到找到换行符。如果换行符之前有任何非空白字符,则输入无效。此外,您不需要do {} while循环,因为无论如何您都在使用break。一个简单的while(1){}或for(;;){}循环将起作用。输入有效时只需break循环。 -
那是因为 scanf 在很多层面上都是不安全的。请参阅this post 了解为什么不建议使用它,以及另一种选择。此外,您应该考虑使用外部或第 3 部分库来安全地解析您的输入。
-
用户如何使用单个数字输入像
39这样的值?你的意思是“一个数字”吗?那么分数(39.23423)呢?正如您已经被告知的那样,scanf()很可能不是工具。使用fgets()读取一行,然后可能sscanf()或strtod()转换值,仔细处理错误情况并检查数字之后和换行之前是否有任何碎片。
标签: c validation