我正在编写一个函数,要求用户输入,然后检查该输入是否为正数,否则它会循环,直到输入正数然后返回该值。这是我到目前为止所得到的,但当它返回时,得到一个奇怪的数字,如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;
}
答案 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
用于浮点数(例如float
,double
)。您应该使用%d
代替。
另外,就像@ K-ballo所提到的那样,你的逻辑错了。您应该使用do {}while
循环,因为在首选之前,您希望先从用户那里获得输入。
do
{
..
scanf("%d", &rentrate);
}while (rentrate <= 0);
答案 3 :(得分:0)
reentrate被声明为整数,我想你想要
scanf("%d",&rentrate);
不
scanf("%f",&rentrate);