Frage zum Quellcode



  • Hab nur mal eine Frage: Möchte im Menü alle Buchstaben und Zahlen ausgrenzen ausser p und k damit man halt nur p und k wählen kann! Habe dieses auch mit einer while Schleife gemacht! Nur leider sagt er mir wenn ich p und k eingebe genaiu das selbe nämlich eingabe nicht möglich bitte neu wählen! Aber warum?

    #include <iostream>
    using namespace std;
    
    float kwrech(float a)
    {
        const float kw = 0.735499;
        float erg = a * kw;
        return erg;
    }
    
    float psrech(float a)
    {
        const float kw = 0.735499;
        float erg = a / kw;
        return erg;
    }
    
    int main()
    {
        char pk;
        float ps;
        float kw;
        char jn;
        do
        {
            cout << "\t\t\t*************************" << endl;
            cout << "\t\t\t*    kW-PS Umrechner    *" << endl;
            cout << "\t\t\t*************************" << endl;
            cout << "\t\t\t::    by A. Maiwald    ::" << endl;
            cout << "\t\t\t-------------------------" << endl;
            cout << "\n\t\t\tWas m\x94 \bchten Sie umrechnen?\n\n\t\t\t(P)S oder (k)W?: ";
            cin >> pk;
            while (toupper(pk) != 'p' || toupper(pk) != 'k')
            {
               cout << "\n\t\t\t" << pk << " nicht m\x94glich!\n\t\t\tBitte neue Auswahl treffen: ";
               cin >> pk;
            }
            if (toupper(pk) == 'P')
            {
               cout << "\n\n\t\t\t\Bitte PS-Wert eingeben: ";
               cin >> ps;
               cout << "\n\n\t\t\t" << ps << " PS entsprechen " << kwrech(ps) << " kW!";
            }
            else
            {
               cout << "\n\n\t\t\tBitte kW-Wert eingeben: ";
               cin >> kw;
               cout <<"\n\n\t\t\t" << kw << " kW entsprechen " << psrech(kw) << " PS!";
            }
            cout << "\n\n\t\t\t Nochmal rechnen? (j/n): ";
            cin >> jn;
            system ("cls");
        }
        while (toupper(jn) == 'J');
        cin.get();
        return 0;
    }
    


  • toupper() wandelt das Zeichen in einen Großbuchstaben um (wer hätte das gedacht), das heißt du mußt auch mit den entsprechenden Großbuchstaben ('P' bzw. 'K') vergleichen und nicht mit den Kleinbuchstaben.



  • while (toupper(pk) != 'p' || toupper(pk) != 'k')
    

    Nunja, spontan fallen mir zwei Sachen auf: pk als Grossbuchstabe kann nie 'p' sein, denn das ist ein Kleinbuchstabe. Und wenn (pk nicht 'P' ODER pk nicht 'k') erfüllt ist fallen auch Ostern und Weihnachten auf einen Tag 😃



  • euhm ja aber auch mit K und P gehts nich 😞



  • ahhhhhhhhhhhhhhhh es muss ein UND sein ^^ also quasi &&... ah nu gehts hehe



  • LordJaxom schrieb:

    Und wenn (pk nicht 'P' ODER pk nicht 'k') erfüllt ist fallen auch Ostern und Weihnachten auf einen Tag 😃

    Stimmt, das kommt auch noch dazu 😉

    Oder auf Deutsch: Eine der beiden Teilbedingungen ist definitiv richtig, agal was in pk drinsteht, also ist die Schleifenbedingung (|| = ODER) konstant wahr. Du benötigst eher && (UND) an der Stelle.
    oder du drehst die Bedinungen um: "while(!(toupper(pk)=='P'||toupper(pk)=='K'))..."


Anmelden zum Antworten