【问题标题】:Need to return a value from a do/while and multiple while loops - C需要从 do/while 和多个 while 循环中返回一个值 - C
【发布时间】:2014-06-09 04:23:17
【问题描述】:

我正在尝试构建一个简单的变化计算器。用户输入欠款金额,然后按回车键。他们输入的值应该先乘以 100(这样当我们四舍五入时,数字不会被截断)。四舍五入应该将浮点数转换为整数,然后应该执行所有数学运算(while 循环),最后打印出一个数字,表示给了他们多少硬币(即多少四分之一,一角硬币,等等......)代码编译正常,它提示用户输入一个值,但是当你按回车时,什么都不执行,命令行回到空白。

任何想法我做错了什么?我的猜测是 while 循环中的值没有被转移出循环,因此它们可以在下一个循环中使用。但是我是 C 语言的早期初学者,不确定循环的正确规则。我尝试查找 while 循环示例,但没有真正解释如何将值从一个 while 循环传递到另一个循环。如果,事实上,这就是问题所在。感谢您的帮助。

代码修订:

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main (void) {

    float change;
    int cents;

    int quarter_count = 0;
    int dime_count = 0;
    int nickel_count = 0;
    int pennies = 0;
    int total_count;

    do
    {
        printf("Enter the amount of change you are owed: ");
        change = GetFloat();
        cents = round(change * 100); 
    }
    while (change < 0);
    return cents;

    int quarter = 25;
    while (cents >= quarter)
    {
        cents = cents - quarter;
        quarter_count++;
    }
    return cents;

    int dime = 10;
    while (cents >= dime)
    {
        cents = cents - dime;
        dime_count++;
    }
    return cents;

    int nickel = 5;
    while (cents >= nickel)
    {
        pennies = cents - nickel;
        nickel_count++;
    }
    return pennies;

    total_count = quarter_count + dime_count + nickel_count + pennies;

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

}  

【问题讨论】:

  • 我在这里看到很多未使用的变量??
  • getFloat() 来自 cs50 库,基本上它接受用户的数字输入并将其标记为浮点变量,然后我可以在其余代码的其他地方使用它。
  • 尝试将打印语句放入每个循环中,找出控制流到达的位置。
  • Henno,哪些没用?这并没有在编译中作为错误出现,它曾经出现过,但现在不再出现了。
  • 如果我输入change=10 的值,第二个循环while (cents &gt;= quarter) 怎么样?会坏吗?

标签: c while-loop cs50


【解决方案1】:

在每个 while 循环之后,您都放置 return 语句。第一个 while..loop 之后的代码意味着更少。

对于第三个while..loop,您也可以设置while (cents &gt;= nickel) 之类的条件,但在while 循环中您不会更改cents 的值。因此,如果cent 的值仍然大于第三个@987654327 时,它将处于无限循环中@。

查看我更新的代码。它将执行您可能想要的基本功能

#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main (void) {

    float change;
    int cents;

    int quarter_count = 0;
    int dime_count = 0;
    int nickel_count = 0;
    int pennies = 0;
    int total_count;

    do
    {
        printf("Enter the amount of change you are owed: ");
        change = GetFloat();
        cents = round(change * 100); 
    }
    while (change < 0);


    int quarter = 25;

    while (cents >= quarter)
    {
        cents = cents - quarter;
        quarter_count++;
    }

     if (cents <= 0)
      goto done;

    int dime = 10;
    while (cents >= dime)
    {
        cents = cents - dime;
        dime_count++;
    }

   if (cents <= 0)
      goto done;

    int nickel = 5;

    pennies=cents;

    while (pennies >= nickel)
    {
        pennies = pennies - nickel;
        nickel_count++;
    }

done:
    total_count = quarter_count + dime_count + nickel_count + pennies;

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

    return 0;

}  

【讨论】:

  • 谢谢杰伊什!!实际上我什至不需要任何 if 语句,只需取出所有返回结果就可以了(我意识到我忘记了一个!)......但我很好奇,你为什么在底部放一个 return 0; ?
  • 您的main 是非无效int main (void)。如果您不返回任何东西,它会向您发出警告。所以返回一些值会很好。
  • 哦,谢谢。我正在终端中编译和运行,所以没有收到错误,但很高兴知道以防将来出现。 :)
猜你喜欢
  • 2016-01-30
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2021-02-01
  • 2018-05-09
  • 1970-01-01
  • 2017-04-03
  • 2022-10-14
相关资源
最近更新 更多