在 do while 循环中不断输出值

Outputing the value constantly when inside a do while loop

请看下面我的代码。它不会太长或太复杂。

简而言之,我遇到的问题是我的 do while 循环应该检查 input 或 input1 的值是否为正,如果不是,则 然后 打印消息到终端。

但是,即使我为 input 和 input1 输入正浮点值,它也总是在终端上打印此消息。

感谢您的协助,

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

int main(void)
{
    float input = get_float("How much money did you pay?");
    float input1 = get_float("What was the total value of the goods?");

    do
    {
        printf("Please enter a positive *number* : ");
    }
    while ((input || input1) < 0.0);


    int answer = round(input - input1);
    {
        printf("Your total change is %i: ", answer);
    }
    {
        printf("\n");
    }
}

有很多问题:

  1. 条件(input || input1) < 0.0错误应该是(input < 0.0 || input1 < 0.0)
  2. 你的while循环只包含一个printf,所以它可能永远循环下去是正常的,因为一旦你进入循环,inputinput1永远不会改变。

你要例如这个(包括省略):

int main(void)
{
    float input;
    float input1;

    do
    {
      input = get_float("How much money did you pay?");
      input1 = get_float("What was the total value of the goods?");

      if (input < 0.0 || input1 < 0.0)
      {
        printf("Please enter positive numbers.\n");
        continue;   // restart the loop
      }
    }
    while (0);
    
    int answer = round(input - input1);
    {
        printf("Your total change is %i: ", answer);
    }

    printf("\n");
}

奖励: inputinput1 是非常糟糕的命名。为什么不调用这些变量 MoneyPaiedValueOfGoods?正确:在这个简单的程序中它并不重要,但是一旦您的程序变得更复杂一点就很重要,因为您的代码将更容易理解(包括您自己)。

当你在c中写多个条件时,分开写。您可以在 while 循环中编写条件,如下所示: 您还应该在循环内输入 inout 。 做 { printf("请输入正数 :"); float input = get_float("你付了多少钱?"); float input1 = get_float("货物的总价值是多少?"); } 而((输入 < 0.0 || 输入 1 <0.0);

现在,您的代码可以正常工作了。

这里解释了为什么您的代码无法正常工作。 C 中每个非零浮点数或整数的计算结果为 True 或 1。(input || input1) 的计算结果为 0 或 1,但它永远不会小于 0.0。因此,您的条件始终为 False。它打破循环并将此消息打印到终端上。

因为你正在使用 do-while 循环

do
{
    printf("Please enter a positive *number* : ");
}
while ((input || input1) < 0.0);

然后声明

    printf("Please enter a positive *number* : ");

总是独立于循环中使用的条件执行。所以使用do-while循环没有意义。

此外,循环条件的计算结果始终为假,因为当操作数之一 input 或 input1 不等于 0 时,表达式 (input || input1) 可以等于 1,或者可以是否则等于 0。但无论如何结果,1或0,都不能小于0.0.

您需要的是以下内容

float input;
float input1;

do
{
    input  = get_float("How much money did you pay? ");
    input1 = get_float("What was the total value of the goods? ");

    if ( input < 0.0f || input1 < 0.0f )
    {
        printf("Please enter a positive *number* : ");
    }
} while ( !( input < 0.0f || input1 < 0.0f ) );

或者把循环分成两个循环会更好。例如

float input;
float input1;

do
{
    input  = get_float("How much money did you pay? ");
    if ( !( 0.0f < input ) )
    {
        printf("Please enter a positive *number* : ");
    }
} while ( !( 0.0f < input ) );

do
{
    input1 = get_float("\nWhat was the total value of the goods? ");
    if ( !( 0.0f < input1 ) )
    {
        printf("Please enter a positive *number* : ");
    }
} while ( !( 0.0f < input1 ) );

还在这些复合语句中包含无条件语句

{
    printf("Your total change is %i: ", answer);
}
{
    printf("\n");
}

没有意义。你可以只写

int answer = round(input - input1);

printf("Your total change is %i: ", answer);
printf("\n");