所以我不熟悉编码,并尝试在C中创建一个程序,在那里我输入一个浮点值,它返回表示该值所需的最小硬币数。但我不断收到此错误消息:
c:16:19:错误:不能取类型'浮点
的右值的地址printf("%f", & change(f) );
#include <stdio.h>
#include <cs50.h>
float change(float n);
int main(void) {
float f;
do {
f = get_float();
} while (f < 0);
change(f);
printf("%f", &change(f));
}
float change(float n) {
float pennies = 0.01;
float nickles = 0.05;
float dimes = 0.1;
float quarters = 0.25;
float coins = 0;
do {
n = n - quarters;
coins++;
} while (n >= quarters);
do {
n = n - dimes;
coins++;
} while (n >= dimes);
do {
n = n - nickles;
coins++;
} while (n >= nickles);
do {
n = n - pennies;
coins++;
} while (n != 0);
return coins;
}
答案 0 :(得分:1)
我在C上生锈了,但在这里我认为正在发生。有左值和右值。
int a = 5;
在这一行a
是左值,5
是左值。您只能获取左值而不是左值的地址。
当你致电change(f)
时,你会得到一个自己的左值,你可以将其分配给左值,如
float ff = change(f);
现在您可以获取ff
的地址。
所以要么像@mco建议的那样尝试(如果你想打印实际值),要么你真的想要地址做这样的事情
float ff = change(f);
printf("%i", &ff);
我将%f
更改为%i
,因为将地址打印为float几乎没有意义。
答案 1 :(得分:0)
格式change(f)
采用浮点数参数,因此您可以将printf
返回的数字作为第二个参数传递给printf ("%f", change(f));
:
change(f)
表达式的临时结果(如&
)是rvalues,它们没有可由Date