0

该函数用于验证输入。它会提示用户输入一个数值(大于或等于 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:输出。有什么建议吗?

4

2 回答 2

3

精度修饰符在scanf. -Wall您可以通过启用所有编译器警告(在 gcc 中)轻松验证这一点。原因是实际输入实际值的方法不止一种,例如,您可以使用0.22e-1

如果您只需要 2 位数字,只需在之后使用scanf("%lf",&num)并四舍五入该数字。请注意,精度修饰符适用于printf

#include <stdio.h>

int main() {
    int ret = 0;
    double num = -1;
    printf("Enter a positive number:");
    ret = scanf("%lf",&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("%lf",&num);
    }
    printf("Your number is %.2lf",num);
    return 0;
}
于 2012-06-30T21:52:56.687 回答
1

我认为仅使用 scanf() 进行验证时会遇到问题。您最好先扫描字符串,然后将其转换为数字。但是 scanf() 对 char 字符串进行扫描是危险的,因为它的输入长度不受限制,您必须为其提供一个指向有限长度输入缓冲区的指针。最好使用 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;
}
于 2012-06-30T21:47:30.547 回答