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 作为硬币数量?
如果我能得到一些指点,而不是直接被告知答案,我将不胜感激;我想了解我在做什么。谢谢!
C
是 12
的十六进制,因此根据您的 printf()
语句,它会按预期返回值。考虑更改 %x
(告诉它使用十六进制打印)到 %d
(普通十进制),我相信你会得到你期望的值:
printf("%x\n", x);
至
printf("%d\n", x);
这个错误是如此的基本,以至于很难不在这里给你答案——它实际上是在你的源代码中改变一个字符来解决这个问题。
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 作为硬币数量?
如果我能得到一些指点,而不是直接被告知答案,我将不胜感激;我想了解我在做什么。谢谢!
C
是 12
的十六进制,因此根据您的 printf()
语句,它会按预期返回值。考虑更改 %x
(告诉它使用十六进制打印)到 %d
(普通十进制),我相信你会得到你期望的值:
printf("%x\n", x);
至
printf("%d\n", x);
这个错误是如此的基本,以至于很难不在这里给你答案——它实际上是在你的源代码中改变一个字符来解决这个问题。