我的代码有问题。它编译时没有错误,但是在从用户那里获取输入后,即使使用正确的值,它似乎跳过第一个条件语句并直接转到ELSE,导致程序终止。我似乎找不到这种行为的原因。
我认为这可能是条件语句构造方式的问题:
if( ((S <= 25 && S <= 75) % 5 == 0) && (U < 0.2 && U < 0.7) ){
我需要检查输入的值是25 <= S <= 75
并且可以被5整除,另一个值是0.2 < U < 0.7
//#include "stdafx.h" // Header File used VS.
#include <iostream>
//#include <iomanip> // Used to format the output.
#include <cstdlib> // Used for system().
#include <math.h> // Used for sqrt().
using namespace std;// ?
int main (){
int S; // Gram/Litre
double U; // Specific Max. Growth Rate. Per Hour.
double D; // Maximum Dilution Rate.
const int K = rand() % 7 + 2; // Saturation Constant - Randomly Gegerated Number Between 2 & 7. In Hour/Litre.
cout << "Enter value between 25 and 75, divisible by 5, for S in Gram/Litre: ";
cin >> S;
cout << "Enter value bigger than 0.2, but less than 0.7, for U per Hour: ";
cin >> U;
if( ((S <= 25 && S <= 75) % 5 == 0) && (U < 0.2 && U < 0.7) ){ // Check Condition ***May Need Adjustments***
D = U * ( 1 - sqrt ( K / ( K + S) ) ); // Might have to adjust values to fit data type double. Add .00
cout.precision(3); // Prints 3 values after decimal point.
cout << "Maximum dilution rate is: " << D << endl;
if( D < 0.35 && D < 0.45 ){
cout << "Kinetic parameters are acceptable." << endl;
}
else{
cout << "Kinetic parameters are not acceptable." << endl;
}
}
else{
cout << "Invalid Input. Program will now terminate." << endl;
}
system("PAUSE"); // Pauses the program before termination.
return 0;
}
答案 0 :(得分:1)
如果您从输入中读取25到75之间的数字,则if( ((S <= 25
始终为false。
您必须使用if( ((S >= 25 && ...
。
答案 1 :(得分:1)
首先,如果你想要25&lt; = S&lt; = 75,你应该有
S <= 25 && S <= 75
,而不是U < 0.2
。与D < 0.35
和0.2 < U
相同 - 它们应为0.35 < D
和1 % 5 == 0
。
其次,上面的语句返回一个布尔值 - 因此,如果S是介于25和75之间的值,则布尔值将转换为整数值1,0 % 5 == 0
始终为false。 (类似地,如果S超出此范围,则布尔值将转换为整数0,if((25 <= S && S <= 75) && (S % 5 == 0) && (0.2 < U && U < 0.7)){
...
if(0.35 < D && D < 0.45){
...
}
...
}
将始终为真)
正确,完整的if语句如下:
.label {
margin: 0;
}
.item-inner {
padding-right: 0px!important;
}
答案 2 :(得分:0)
问题主要在于你的循环条件。例如,在您的代码的这一行:
if( ((S <= 25 && S <= 75) % 5 == 0) && (U < 0.2 && U < 0.7) ){
//...
}
if条件 S&lt; = 25&amp;&amp; S <= 75 简单地可以重写为 S&lt; = 25 ,因为在单词中,您的参数表明如果S小于或等于25或者如果S小于或者等于75,依此类推。
这里存在同样的问题: U&lt; 0.2&amp;&amp; U&lt; 0.7 即可。 if语句再次简单地检查U是否小于0.2且U小于0.7,如果前者为真,则后者始终为真。
但是,在接受2个输入之前的输出语句中,您声明S的范围应为25 <= S <= 75,这意味着S 大于大于25;不低于。对于U来说同样的问题:您期望输入范围在0.2
如何重写if-then语句如下:
if( (S >= 25 && S <= 75) && (S % 5 == 0) && (U > 0.2 && U < 0.7) ){
//...
}
这不仅使您的if语句条件更易于阅读和理解,而且还消除了错误。这应该现在有效。代码的含义保持不变: S 必须介于25和75之间(包括这些数字),它应该可以被5整除,U应该介于0.2和0.7之间。
顺便说一句,这部分代码也存在同样的错误: if( D < 0.35 && D < 0.45 ){...
我在下面修改了它:
if( D > 0.35 && D < 0.45 ){...
祝你好运!