1

我正在编写一个函数,要求用户输入,然后检查该输入是否实际上是一个正数,如果不是,它会循环直到输入一个正数,然后返回该值。这是我到目前为止所拥有的,但是当它返回时我得到一个奇怪的数字,比如 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

4 回答 4

6

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

如果您想了解有关如何scanf()工作的更多信息,可以查看此处

于 2013-09-03T00:47:58.230 回答
1

有点离题,但我不喜欢这个声明:你根本没有使用rentrate 作为输入,所以它不应该是一个参数。

int checkposrate() {
    int rentrate;

其次,正如其他人所说,您需要 %d 代替,但我实际上会使用 %u - 它只接受正整数。如果您将rentrate 设置为等于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;
}
于 2013-09-03T00:50:38.387 回答
0

%f用于浮点数(例如floatdouble)。你应该%d改用。

另外,就像@K-ballo 提到的那样,您的逻辑是错误的。您应该使用do {}while循环,因为您希望在做出第一选择之前先从用户那里获取输入。

do
{
   ..
   scanf("%d", &rentrate);
}while (rentrate <= 0);
于 2013-09-03T00:48:22.340 回答
0

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

    scanf("%d",&rentrate);

不是

    scanf("%f",&rentrate);
于 2013-09-03T00:49:49.227 回答