在 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");
}
}
有很多问题:
- 条件
(input || input1) < 0.0
错误应该是(input < 0.0 || input1 < 0.0)
- 你的while循环只包含一个printf,所以它可能永远循环下去是正常的,因为一旦你进入循环,
input
和input1
永远不会改变。
你要例如这个(包括省略):
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");
}
奖励: input
和 input1
是非常糟糕的命名。为什么不调用这些变量 MoneyPaied
和 ValueOfGoods
?正确:在这个简单的程序中它并不重要,但是一旦您的程序变得更复杂一点就很重要,因为您的代码将更容易理解(包括您自己)。
当你在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");
请看下面我的代码。它不会太长或太复杂。
简而言之,我遇到的问题是我的 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");
}
}
有很多问题:
- 条件
(input || input1) < 0.0
错误应该是(input < 0.0 || input1 < 0.0)
- 你的while循环只包含一个printf,所以它可能永远循环下去是正常的,因为一旦你进入循环,
input
和input1
永远不会改变。
你要例如这个(包括省略):
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");
}
奖励: input
和 input1
是非常糟糕的命名。为什么不调用这些变量 MoneyPaied
和 ValueOfGoods
?正确:在这个简单的程序中它并不重要,但是一旦您的程序变得更复杂一点就很重要,因为您的代码将更容易理解(包括您自己)。
当你在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");