我真的很喜欢编程,我刚刚开始在哈佛的CS50上尝试一些问题集。如果有人能指出我为什么我的代码是错误的,那将不胜感激。
编译并运行代码后,没有任何输出。
另一方面,任何人都可以向我解释" round"作品?我不是真的从终端上的男人那里得到它。谢谢!
#include <stdio.h>
#include <math.h>
int main(void)
{
printf(" O hai! How much change is owed?\n");
float change;
change=GetFloat();
double round(double change);
int x= change*100;
int i=0;
while(x>25) {
x=x-25;
i++;
return i;
}
while(x>10) {
x= x-10;
i++;
return i;
}
while(x>5) {
x=x-5;
i++;
return i;
}
while(x>1) {
x=x-1;
i++;
return i;
}
printf("%d\n",i);
}
答案 0 :(得分:1)
第一件事 在您输入美元之后 你应该在它之后将它乘以100以将其转换为美分 并使用 round 功能。 使用
change = round(change) ;
在你的代码中 因为变化是浮点值 但我们需要整数钱来计算所用硬币的数量 所以我们使用round将其更改为整数 因为我们无法计算使用浮点值的硬币数量
然后:
return i ;
声明不应该使用
在每个循环中
从每个循环中删除它。
因为,如果你在每个lopp中使用它
它会计算出那些特定的硬币
然后退出程序。
因此,删除所有这些return i
语句
你可以写return 0 ;
之后
printf("%d\n", i);
声明!
答案 1 :(得分:0)
一个问题可能是调用round函数。你可以调用函数
double value=round(variable);
其中value为您提供舍入的数字。 见这个链接---
http://fresh2refresh.com/c/c-arithmetic-functions/c-round-function/
答案 2 :(得分:0)
您的代码无效,因为您在每个i
循环中都返回while
。
当行return i
执行时,main
函数返回,程序终止。
可能的解决方案是删除循环中的所有return语句。
答案 3 :(得分:0)
return语句表示函数的结束。循环不是函数,因此返回语句不是必需的。
您没有收到输出,因为Main本身就是一个功能。因此,当达到“返回i”时,机器认为已经达到主要功能的结束并且停止运行。
因此,第一个while循环下面的所有内容都不会运行。这就是你没有看到printf输出的原因。
稍后在编程中,您将使用多个return语句来表示函数(或程序本身)应停止运行的位置。但是在第一个作业中,你最后应该只有一个return语句。
答案 4 :(得分:0)
首先,我建议您阅读cs50Style并添加一些注释,以便代码更清晰,不仅适合我们,还适合您。另一个建议是增加一些&#34;测试&#34;在程序期间,例如,如果您想知道程序的某些部分是否正在执行,请添加一些代码,如:
printf("TEST1\n"); //check 1
通过这样做,您可以检查您的程序何时到达某个点或在另一个点失败。 (在发送或检查问题之前,将删除此测试,不要忘记)。
现在让我们解决主要问题。要了解功能或任何功能的作用,您可以访问[参考cs50]:https://reference.cs50.net或在您的&#34; cs50设备中进行写入&#34; console: man后跟
这个函数基本上将数字四舍五入到最接近的整数值( 2.70到3.00 )。
关于你的计划为什么不起作用的问题。
首先,我想看一下在输入部分实现do..while循环的方法:
printf(" O hai! How much change is owed?\n");
float change;
change=GetFloat();
因为如果我写下-5.00,结果会是什么?
其次,在每次迭代中返回i的值都不是必需的。
第三,我发现符号存在问题,例如:x> 25,x> 10。如果您写的x> 10?,如果剩余的硬币是10,该怎么办?解决这个问题非常容易:)
第四,如果你考虑一下,你真的不需要写代码的最后一部分
while(x>1)
{
x=x-1;
i++;
因为硬币值为1,所以你可以将剩余1个硬币的数量加到总数中( i + x )。
在编写代码
时尝试使用它来冒险x = x-1;
等于
x -= 1;
最后我想告诉你,有一种方法可以解决这个问题而不用任何while(x&gt; = 25,x&gt; = 10,...),只需要做总和,划分(想想类型为int)财产)和模数运算。
此外,我希望你不要放弃这门课程,这是一项具有挑战性的课程,但是一旦你学到了东西,这真的很有趣,就像某种雪球一样。
祝你好运!答案 5 :(得分:0)
正如JPG所提到的,它没有给你任何输出的原因是因为每当你使用return语句时,它会立即尝试退出当前活动的函数。当该函数为main时,表示程序本身将尝试退出。
你试图用剩余价值做某事的想法是正确的,这是你需要做的,但是你需要以不同的方式做。您可能可以使用除法,但我建议您查看mod(%)运算符。它会更清洁。
此外,您的循环存在流量问题。嵌套循环在每个级别下降。为了满足您的期望,每个循环都需要处于同一级别。您将很快遇到嵌套循环,理解逻辑流程非常重要。
这实际上是我第一次见到这种尝试,说实话真的很有趣!如果你删除了回报,你实际上会得到(不正确的)输出。有更简单的方法可以获得结果,但一旦修复了逻辑错误,这种方法就可以正常工作。