while()循环请求正输入

时间:2013-09-03 00:44:00

标签: c while-loop scanf

我正在编写一个函数,要求用户输入,然后检查该输入是否为正数,否则它会循环,直到输入正数然后返回该值。这是我到目前为止所得到的,但当它返回时,得到一个奇怪的数字,如20204421.000任何帮助?

/* Checks if rate is infact positive and loops until a positive number is inputed */
int checkposrate(int rentrate) 
{
    while (rentrate < 0){
        printf("Please enter the anual rental rate per square foot(must be positive number):");
        scanf("%f",&rentrate);
    }
    return rentrate;
 }

4 个答案:

答案 0 :(得分:6)

您应该使用scanf("%d", &rentrate);来获取整数值。当您想输入浮点数时,使用"%f"

如果您想了解scanf()工作原理的更多信息,请you can take a look in here

答案 1 :(得分:1)

稍微偏离主题,但我不喜欢声明:你根本没有使用租金作为输入,所以这不应该是一个参数。

int checkposrate() {
    int rentrate;

其次,正如其他人所说,你需要%d,但我实际上会使用%u - 这只接受正整数。如果将rentrate设置为start等于0,那么只有当用户输入有效的无符号整数时,才会设置scanf,并使用此代码。请注意,这假设零不是有效的正数:

/* Checks if rate is in fact positive and loops until a positive number is read from input */
unsigned int checkposrate() 
{
    unsigned int rent_rate = 0;
    while (rent_rate <= 0){
        printf("Please enter the annual rental rate per square foot (must be a positive integer): ");
        scanf("%u",&rent_rate);
    }
    return rent_rate;
}

另一方面,如果您确实需要小数租金,那么您对%f是正确的,但代码中的变量类型错误:

double checkposrate() {
    double rent_rate = -1.0;
    while (rent_rate < 0.0 && rent_rate) {
        printf("Please enter the rental rate per sq ft: ");
        scanf("%lf", &rent_rate);
    }
    return rent_rate;
}

答案 2 :(得分:0)

%f用于浮点数(例如floatdouble)。您应该使用%d代替。

另外,就像@ K-ballo所提到的那样,你的逻辑错了。您应该使用do {}while循环,因为在首选之前,您希望先从用户那里获得输入。

do
{
   ..
   scanf("%d", &rentrate);
}while (rentrate <= 0);

答案 3 :(得分:0)

reentrate被声明为整数,我想你想要

    scanf("%d",&rentrate);

    scanf("%f",&rentrate);
相关问题