函数用于验证输入。它会提示用户输入一个数值(大或等于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/

10-10 18:33
查看更多