输入后我的程序似乎跳过第一个IF语句并直接进入ELSE

时间:2017-01-19 17:07:59

标签: c++ windows

我的代码有问题。它编译时没有错误,但是在从用户那里获取输入后,即使使用正确的值,它似乎跳过第一个条件语句并直接转到ELSE,导致程序终止。我似乎找不到这种行为的原因。

我认为这可能是条件语句构造方式的问题: if( ((S <= 25 && S <= 75) % 5 == 0) && (U < 0.2 && U < 0.7) ){

我需要检查输入的值是25 <= S <= 75并且可以被5整除,另一个值是0.2 < U < 0.7

Course Assignment

//#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;
}

3 个答案:

答案 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.350.2 < U相同 - 它们应为0.35 < D1 % 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 ){...
祝你好运!