Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法获取类型为';浮动';_C_Pointers_Cs50 - Fatal编程技术网

C 无法获取类型为';浮动';

C 无法获取类型为';浮动';,c,pointers,cs50,C,Pointers,Cs50,所以我对编码还不熟悉,尝试用C语言编写一个程序,输入一个浮点值,它返回表示该值所需的最小硬币数。但我一直收到这样的错误信息: c:16:19:错误:无法获取“float”类型的右值的地址 printf(“%f”,&更改(f)) #包括 #包括 浮动变化(浮动n); 内部主(空){ 浮动f; 做{ f=获取浮点数(); }f=四分之一); 做{ n=n-十美分; 硬币++; }而(n>=一角硬币); 做{ n=n-刻痕; 硬币++; }而(n>=刻痕); 做{ n=n便士; 硬币++; }而(n!

所以我对编码还不熟悉,尝试用C语言编写一个程序,输入一个浮点值,它返回表示该值所需的最小硬币数。但我一直收到这样的错误信息:

c:16:19:错误:无法获取“float”类型的右值的地址

printf(“%f”,&更改(f)

#包括
#包括
浮动变化(浮动n);
内部主(空){
浮动f;
做{
f=获取浮点数();
}f<0;
变更(f);
printf(“%f”、&change(f));
}
浮动变化(浮动n){
浮动便士=0.01;
浮痕=0.05;
浮动硬币=0.1;
浮动四分之一=0.25;
浮动硬币=0;
做{
n=n个四分之一;
硬币++;
}而(n>=四分之一);
做{
n=n-十美分;
硬币++;
}而(n>=一角硬币);
做{
n=n-刻痕;
硬币++;
}而(n>=刻痕);
做{
n=n便士;
硬币++;
}而(n!=0);
归还硬币;
}

格式
%f
采用浮点数参数,因此您可以将
change(f)
返回的数字作为第二个参数传递给
printf

printf ("%f", change(f));

表达式的临时结果,如
change(f)
,是右值,它们没有一个可以被
&
访问的内存位置。我对C感到生疏,但我认为这里发生了什么。有左值和r值

int a = 5;
在这一行中,
a
是左值,
5
是右值。您只能获取左值而不能获取右值的地址。 当您调用
change(f)
时,您自己会得到一个右值,然后您可以将其分配给左值,如

float ff = change(f);
现在您可以获取
ff
的地址。 所以,或者按照@mco的建议去做(如果你想打印一个实际值),或者如果你真的想要地址,就这样做

float ff = change(f);
printf("%i", &ff);

我将
%f
更改为
%I
,因为将地址打印为float没有什么意义。

在该示例中,为什么还要将指针传入?你的
printf
函数不希望在那里有指针。我投票决定关闭这个函数,因为它是由一个简单的印刷错误引起的,或者是由于对该语言的基础研究远远不够,这两者都不能为将来的读者创建一个有用的线程。
printf(“%f”,&change(f))
尝试将
change()
返回的值的地址打印为浮点数(因为它是右值,所以不能打印)。您只需要打印函数结果的值:
printf(“%f”,change(f))这使上一次调用
change(f)不需要。欢迎访问该网站!查看和,了解有关提问的更多信息,这些问题将吸引高质量的答案。如果评论者要求,您还可以添加更多信息。我同意@johnnymop。旁白:请阅读,尽管这是一个java问题,但公认的答案是,这个问题不仅适用于java,还适用于任何使用本机浮点类型的编程语言。
%I
对于打印指针来说没有什么好处,因为它可能会溢出或以其他方式调用UB。这应该是
%p
。但很明显,打印
浮点值的地址并不是OP想要的。
float ff = change(f);
printf("%i", &ff);