Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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
检查CS50哈佛大学现金应用程序中的50错误_C_Cs50 - Fatal编程技术网

检查CS50哈佛大学现金应用程序中的50错误

检查CS50哈佛大学现金应用程序中的50错误,c,cs50,C,Cs50,非常新的编码,所以任何帮助是感激的,已经在这些检查错误上停留了一段时间 //源代码 #包括 #包括 #包括 内部主(空) { 浮动用户; 整数变化,硬币,小数; 做 { printf(“输入变更金额”); user=get\u float(“”); }while(用户=25) { 改变=改变-25; 硬币++; } 而(更改>=10) { 改变=改变-10; 硬币++; } 而(更改>=5) { 改变=改变-5; 硬币++; } 而(更改>=1) { 改变=改变-1; 硬币++; } print

非常新的编码,所以任何帮助是感激的,已经在这些检查错误上停留了一段时间

//源代码
#包括
#包括
#包括
内部主(空)
{
浮动用户;
整数变化,硬币,小数;
做
{
printf(“输入变更金额”);
user=get\u float(“”);
}while(用户=25)
{
改变=改变-25;
硬币++;
}
而(更改>=10)
{
改变=改变-10;
硬币++;
}
而(更改>=5)
{
改变=改变-5;
硬币++;
}
而(更改>=1)
{
改变=改变-1;
硬币++;
}
printf(“您已输入\f%.1f\n”,用户);
睡眠(1);
printf(“尽可能少的硬币数量\f%.2d\n”,硬币);
}
我不断收到的错误消息: :(0.01的输入产生1的输出 应为“1\n”,而不是“You have enter…”这实际上返回01,因此不确定 :(1.6的输入产生7的输出 应该是“7\n”,而不是“您已输入…”同样的事情只是07有办法删除零吗?

:(4.2的输入产生18的输出 应为“18\n”,而不是“您已输入…” 你忘了把你的输入四舍五入到最接近的一分吗


这个我不确定它的输出是否为22

对于输入
4.20
来说,您看到的是
22
而不是
18
,这是因为浮点的不精确性。浮点不能准确地表示值
4.20
,因此它将存储一个稍大或稍小的值
4.20
在变量中

如果使用稍小的值(例如4.1999999或4.19998567),将其与100相乘,得到接近419.99999的值。将其转换为
int
将截断为419,得到22枚硬币的结果

解决方案是在将浮点数转换为整数时舍入到最接近的整数,而不是截断。一个适用于小浮点数的常见技巧是在截断之前加0.5:

 change = user * 100 + 0.5;
419.5000到420.4999范围内的值将转换为420.0000到420.99999范围内的值。然后截断将生成420

当然,您也可以使用
c
附带的内置舍入函数


你也应该考虑使用<代码>双<代码>,而不是<代码>浮点。使用<代码>浮点保存的空间在现代桌面系统上通常是不值得的。

问题集很清楚程序应该输出什么样的输出。你不匹配它。再次阅读。< /P>


别忘了根据习题集对输入进行四舍五入。

什么是
的内容?尽管仔细看一下预期的输出,你是否没有得到预期的结果?你知道
'\n'
是什么吗?我想检查程序只是想让你打印一个数字,而不是友好的文本。还有几点注意:你知道吗无需使用
printf
提示输入浮点(
get\u float
支持提示输入)。计算可以用整数除法和模来完成,不需要循环。如果在打印整数时不需要前导零,那么不要在格式字符串中要求它们。@sweenish,
cs50。h
是harward cs50课程使用的内存泄漏输入库的头。它的优点是教学生不要使用
 scanf
用于输入。主要的缺点是它定义了
typedef char*string
,并且它的字符串输入是以一种不可能修复内存泄漏的方式写入的。@HAL9000,很有趣。我假设
get_float()
来自它;我很难理解为什么它需要用空字符串文字进行初始化。在我教学时,Intro从未对输入验证感到烦恼,因为它的兔子洞太大了,无法打扰那些学生。后来的课程只是“将其作为字符串并对其运行一些基本验证。”这个代码看起来像C++标签应该被删除。谢谢你对这个提示非常感激和感谢。你知道为什么我仍然会收到这些错误,即使它正确的只是前面有一个零。(输入1.6的输出结果为7)预期“7 \n”,而不是“你已经进入……(输入0.01的产出预期1的预期)1”,“不”。你必须进入……”