Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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-四舍五入问题(CS50)_C_Rounding_Math.h_Cs50 - Fatal编程技术网

C-四舍五入问题(CS50)

C-四舍五入问题(CS50),c,rounding,math.h,cs50,C,Rounding,Math.h,Cs50,我已经在谷歌上搜索了好几天了,我迷路了。所以在网上做CS50似乎无法处理这个数字的舍入。我的程序将像2.10这样的浮点数与像100这样的整数相乘,结果将是209.xxxxxxxx 现在就像我说的,我已经读了无数关于我应该使用ceilf并包括的帖子,但是我得到了一个错误 贪婪的.c:(.text+0x74):对'ceilf'的未定义引用 collect2:错误:ld返回了1个退出状态make:**[贪婪]错误1 adam@beethoven:~/projects/atom/edx/pSet1/gr

我已经在谷歌上搜索了好几天了,我迷路了。所以在网上做CS50似乎无法处理这个数字的舍入。我的程序将像2.10这样的浮点数与像100这样的整数相乘,结果将是209.xxxxxxxx

现在就像我说的,我已经读了无数关于我应该使用ceilf并包括的帖子,但是我得到了一个错误

贪婪的.c:(.text+0x74):对'ceilf'的未定义引用 collect2:错误:ld返回了1个退出状态make:**[贪婪]错误1 adam@beethoven:~/projects/atom/edx/pSet1/greedy$

我看过关于-lm和某个文件的帖子,但如果我是诚实的,我不明白这是什么意思

我不是在寻找一个彻底的解决方案,只是在改进方面寻求指导

这是我的代码,可能没有一些人希望的那么精简,但我在这里又回到了基础;)

#包括
#包括
int main(){
//初始化变量
int coinsTotal=0,
四分之一=25,
一角=10,
镍=5,
便士=1,
美分;
浮动到期日;
做{
printf(“您欠多少零钱?(格式=0.00)($):”;
scanf(“%f”、&changeDue);
//兑换成美分
美分=到期换单*100;
}而(美分=四分之一){
美分=美分-四分之一;
coinsTotal=coinsTotal+1;
}如果(美分==0){
printf(“硬币的最小数量为:%d\n”,coinsTotal);
}否则{
而(分>=一角){
美分一角;
coinsTotal=coinsTotal+1;
}如果(美分==0){
printf(“最小硬币数量为:%d\n”,coinsTotal);
}否则{
而(美分>=镍){
美分=美分-镍;
coinsTotal=coinsTotal+1;
}如果(美分==0){
printf(“最小硬币数量为:%d\n”,coinsTotal);
}否则{
而(美分>=便士){
美分=美分-便士;
coinsTotal=coinsTotal+1;
}如果(美分==0){
printf(“最小硬币数量为:%d\n”,coinsTotal);
}
}
}
}
}
基本上,它应该计算出制造一定数量硬币所需的最小数量。在大多数情况下,它会一直工作,直到浮子弄乱为止。请原谅,我喜欢写我做过的事情,这样我会学得更好

更新尝试使用-lm使用GCC进行编译,但仍然失败。 adam@beethoven:~/projects/atom/edx/pSet1/greedy$gcc-o foo-lm 贪婪的.c/tmp/cc3qHAK7.o:在函数
main]中:贪婪的.c:(.text+0x6e):
未定义对
ceilf'collect2的引用:错误:ld返回1个出口 地位adam@beethoven:~/projects/atom/edx/pSet1/greedy$

解决方案,而不是使用make命令,我使用了gcc并添加了 命令末尾的-lm标志
gcc-o foo greedy.c-lm

我看过关于-lm和某个文件的帖子,但如果我是诚实的,我不明白这是什么意思


您必须链接到数学库才能修复错误。数学函数的实现通常作为一个单独的库,即数学库。如果您使用
gcc
-lm
添加到链接器命令。

我假定您希望将浮点数四舍五入到最接近的整数
ceilf
没有这样做,它正在向上取整。如果可能,可以使用此宏舍入到最接近的长度:

#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
此外,由于未链接到数学库,因此会出现链接错误。例如,使用:

gcc greedy.c -lm -o greedy

你知道MCVE是什么吗?嗨,阿米特我不知道它是什么。我用谷歌搜索了一下,在这个网站上找到了这个页面。我感谢你指出这一点,我将据此编辑我的文章。好的,你是一个模范公民:-)为什么不直接手工解析输入字符串,这样你就不必使用任何数学函数来做一些简单的事情,比如读取一个字符串,比如“2.10”并将其转换为210?指导:1)如果代码要使用浮点货币,请使用
double
。2) 无论何时将浮点货币转换为
int
,请使用
round()
,如
cents=round(changeDue*100)添加
-lm
表示“请链接一个名为libm的库”。如果您使用的是Makefile,请查找用于生成最终二进制文件的命令,并向其中添加
-lm
。@Adam'Sacki'Sackfield由于您使用的是Makefile,您可能希望将其添加到Makefile开头的
LDFLAGS
,或者只使用
make LDFLAGS=-lm greedy
,假设makefile中的
cc
行在行尾列出了
$(LDFLAGS)
。如果它没有列在
cc
行上,您可以在
cc
行的末尾添加
$(LDFLAGS)
,也可以在行的末尾添加硬编码
-lm
本身以代替
$(LDFLAGS)
<但是,code>$(LDFLAGS)
更灵活,因为它允许您列出多个库,例如,
make LDFLAGS='-lmylib-lXt-lX11-lm
您可以使用以下神秘的调用:
make myprog LDLIBS=-lm
(用
myprog
代替您通常制作的任何库)。@ChronoKitsune:LDLIBS,而不是LDFLAGS。LDFLAGS在命令行中来得太早。@ ADAM'sAcsi'sAcfield -LM必须在编译/链接行的末尾添加,而不是在编辑中的中间部分。我想把2位小数排到一起。注意:<代码>圆(双)< /代码>。define遇到了一些问题,比如0.5之前的数字和正好代表
long
的整数,但不代表
double
,还有一些类似的情况。它的优点是不需要数学库,而OP链接起来有困难。
gcc greedy.c -lm -o greedy