c ++ - Efter indgangen synes mit program at springe over den første IF-sætning og gå direkte til ELSE

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et problem med koden. Det kompilerer uden fejl, men lige efter at have taget input fra brugeren ser det ud til at springe over den første betingede erklæring og gå direkte til ELSE, hvilket får programmet til at opsige. Jeg kan ikke synes at finde årsagen til denne adfærd.


Jeg tror, ​​det kan være spørgsmålet med den måde, den betingede erklæring er konstrueret på:
if( ((S <= 25 && S <= 75) \% 5 == 0) && (U < 0.2 && U < 0.7) ){


Jeg skal kontrollere, om den indtastede værdi er 25 <= S <= 75 og kan deles med 5, og den anden værdi er 0.2 < U < 0.7.


Kursusopgave [20]


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

Bedste reference


Først, hvis du vil have 25 <=S <=75, skal du have
25 <= S && S <= 75, ikke S <= 25 && S <= 75. Samme med U < 0.2 og D < 0.35 - de skulle være 0.2 < U og 0.35 < D.


For det andet returnerer ovennævnte sætning en boolsk - således, hvis S er en værdi mellem 25 og 75, vil den boolske blive støbt til et helt tal på 1, og 1 \% 5 == 0 altid være falsk. (Ligeledes, hvis S er uden for dette område, vil den boolske blive kastet til et helt tal 0 og 0 \% 5 == 0 vil altid være sandt)


En korrekt, fuldstændig if-erklæring er som følger:


if((25 <= S && S <= 75) && (S \% 5 == 0) && (0.2 < U && U < 0.7)){ ... if(0.35 < D && D < 0.45){ ... } ... }

Andre referencer 1


Hvis du læser et tal mellem 25 og 75 fra input, er if( ((S <= 25 altid falsk.


Du skal bruge if( ((S >= 25 && ....

Andre referencer 2


Problemet ligger hovedsageligt i dine sløjfeforhold. For eksempel i denne linje fra din kode:


    if( ((S <= 25 && S <= 75) \% 5 == 0) && (U < 0.2 && U < 0.7) ){ 
        //...
    }


Hvis betingelsen S <= 25 & S kan simpelthen omskrives som S <= 25 , fordi i ord betyder din parameter, at hvis S er mindre end eller lig med 25 ELLER, hvis S er mindre end eller lig med 75, og så videre.


Det samme problem findes her: U < 0,2 & U < 0,7 . Endnu en gang kontrollerer if-sætningen simpelthen, om U er mindre end 0,2 og U er mindre end 0,7, sidstnævnte er altid sandt, hvis førstnævnte er sandt.


I din output statement, før du accepterer de 2 indgange, angiver du imidlertid, at S skal have en rækkevidde på 25 <= S <= 75, hvilket betyder at S er større end 25; ikke mindre. Det samme problem for U: Du forventer input mellem 0,2 < U < 0.7.


Hvordan du bør omskrive din if-then erklæring er som følger:


    if( (S >= 25 && S <= 75) && (S \% 5 == 0) && (U > 0.2 && U < 0.7) ){ 
        //...
    }


Dette gør ikke kun dine om-sætnings forhold lettere at læse og forstå, men det fjerner også fejlene. Det skal arbejde nu. Kodenes betydning forbliver den samme: S skal være mellem 25 og 75 (inklusive disse tal), den skal være delelig med 5, og U bør være mellem 0,2 og 0,7.


BTW, den samme fejl findes også i denne del af din kode:


    if( D < 0.35 && D < 0.45 ){...


Jeg fik det under:


    if( D > 0.35 && D < 0.45 ){...


Held og lykke!