greedy.c CS50/C 语言的奇怪答案

Odd answer for greedy.c CS50/ C-Language

int main(void)
{
double change;
int x = 0;

// loops everytime user inputs invalid #//

do 
{
  printf("How much change is owed? \n");
  change = get_float();    
}
while(change < 0);


//declaring i for change in int, rounds to int from float//
int i = roundf(change * 100);


while (i >= 25){
x++;
i -= 25;
}

while (i >= 10){
x++;
i -= 10;
}

while(i >= 5){
x++;
i -= 5;
}

while(i >= 1){
x++;
i -= 1;
}

//prints x; total amt of coins used//
printf("%x\n", x);

return 0;

好吧,当我与它交互时,我输入 1,然后得到 4。这是正确的。

如果我输入2,我得到8;到目前为止一切顺利..

然而,当我输入 3 时,我得到字母 c(?) 作为答案。 我也被这个问题困扰了一段时间,作为搜索 google,但我没有找到类似的东西。

有人告诉我我的 while 循环中缺少大括号,所以我添加了大括号。但这并没有改变任何东西。

1).有什么办法可以避免将字母 c 作为硬币数量?

如果我能得到一些指点,而不是直接被告知答案,我将不胜感激;我想了解我在做什么。谢谢!

C12 的十六进制,因此根据您的 printf() 语句,它会按预期返回值。考虑更改 %x(告诉它使用十六进制打印)到 %d(普通十进制),我相信你会得到你期望的值:

printf("%x\n", x);

printf("%d\n", x);

这个错误是如此的基本,以至于很难不在这里给你答案——它实际上是在你的源代码中改变一个字符来解决这个问题。