我正在处理CS50问题集1,问题Greedy.c并且我无法解决此错误。
greedy.c:26:15: error: declaration shadows a local variable [-Werror,-Wshadow]
float cents = cents - q;
^
greedy.c:16:11: note: previous declaration is here
float cents = roundf(change * 100);
我错过了什么?鉴于错误,我想知道在声明浮点数“美分”时我是否不想包含一段语法。我是一个菜鸟,所以请原谅我的代码中的任何低效/冗余。
int main(void)
{
float change;
do
{
printf("Change: ");
change = get_float();
}
while (change < 0);
float cents = roundf(change * 100);
int coins = 0;
int q = 25;
int d = 10;
int n = 5;
int p = 1;
while (cents >= q)
{
coins++;
float cents = cents - q;
}
while (cents >= d)
{
coins++;
float cents = cents - d;
}
while (cents >= n)
{
coins++;
float cents = cents - n;
}
while (cents >= p)
{
coins++;
float cents = cents - p;
}
while (cents == 0)
{
printf("Total coins dispensed: %i\n", coins);
}
return 0;
}
答案 0 :(得分:3)
将float cents =
替换为cents =
循环中的while
。
目前,您正在尝试声明一个新变量cents
阴影现有变量。从技术上讲,这是有效的C,也许你的编译器(谢天谢地)将此警告设置为错误?
请注意,您可以使用整数除法将大部分逻辑优化为O(1)并仔细检查调试器。如果你使用浮点类型,反复从一个值中减去是粗略的,可以让你进入热水,并且不必要地计算成本。 (虽然可以是让事情有效的好方法。)
最后,你需要最后一次while
循环吗?大概你总是想要输出分配的硬币,而不是cents
为零时的无限次数?