函数用于验证输入。它会提示用户输入一个数值(大或等于0),直到满足编码条件为止。如果任何字符输入在数字前面或后面,则该输入将被视为无效。所需输出为:
Enter a positive numeric number: -500
Error! Please enter a positive number:45abc
Error! Please enter a number:abc45
Error! Please enter a number:abc45abc
Error! Please enter a number:1800
嗯,看起来很简单:
#include <stdio.h>
main() {
int ret=0;
double num;
printf("Enter a positive number:");
ret = scanf("%.2lf",&num);
while (num <0 ) {
if (ret!=1){
while(getchar()!= '\n');
printf("Error!Please enter a number:");
}
else{
printf("Error!Please enter a positive number:");
}
ret = scanf("%.2lf",&num);
}
}
但是,无论输入类型如何,我的代码都会保持输出
Error!Please enter a number:
。有什么建议吗? 最佳答案
我认为您在使用scanf()进行所需的验证时会遇到问题。最好先扫描字符串,然后将其转换为数字。但是scanf()对于扫描字符字符串是危险的,因为它的输入长度不受限制,而且必须为它提供指向有限长度输入缓冲区的指针。最好使用fgets(),它允许您限制输入缓冲区的长度。
#include <stdio.h>
int main(int argc, char **argv)
{
double num=-1;
char input[80]; // arbitrary size buffer
char* cp, badc; // badc is for detecting extraneous chars in the input
int n;
printf("Enter a positive number:");
while (num < 0)
{
cp = fgets(input, sizeof(input), stdin);
if (cp == input)
{
n = sscanf(input, "%lf %c", &num, &badc);
if (n != 1) // if badc captured an extraneous char
{
printf("Error! Please enter a number:");
num = -1;
}
else if (num < 0)
printf("Error! Please enter a POSITIVE number:");
}
}
printf("num = %f\n", num);
return 0;
}
关于c - C中的输入数据验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11277641/