C错误:声明阴影局部变量 - 不会让我反复替换我的浮点变量的值

时间:2017-03-13 16:59:34

标签: c syntax-error cs50

我正在处理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;

}

1 个答案:

答案 0 :(得分:3)

float cents =替换为cents =循环中的while

目前,您正在尝试声明一个新变量cents 阴影现有变量。从技术上讲,这是有效的C,也许你的编译器(谢天谢地)将此警告设置为错误?

请注意,您可以使用整数除法将大部分逻辑优化为O(1)并仔细检查调试器。如果你使用浮点类型,反复从一个值中减去是粗略的,可以让你进入热水,并且不必要地计算成本。 (虽然可以是让事情有效的好方法。)

最后,你需要最后一次while循环吗?大概你总是想要输出分配的硬币,而不是cents为零时的无限次数?