do-while schleifen fehler?



  • Was funktioniert denn genau nicht so richtig daran?



  • fehlermeldung:
    implicit declaration of function 'int tolower(...)'

    danke!



  • #include <iostream> 
    #include <cctype>
    using namespace std;
    
    int main (){ 
        int a, nochmal; 
        do{ 
           cout << "Geben Sie ein Zahl ein: " << endl; 
           cin >> a; 
           cout << a % 5 << endl; 
           cout <<"Nochmal (J/N): " << endl; 
           cin >> nochmal; 
        } 
        while(nochmal == 'j' || 'J'); 
    }
    

    so ist's komplett



  • nochmals danke!
    ps: hier sollte natürlich "nochmal" auch char sein!
    tut mir leid, dass ich so nerv, aber was ist das "using namespace std"
    und das "tolower"?
    mfg



  • Du hast den Header iostream in dein Projekt eingebunden. Alle Klassen und Funktionen dieses Headers sind im Namespace std geschrieben.

    Das heißt du kannst zum Beispiel

    cout << "blah"
    

    nur mit

    std::cout << "blah"
    

    aufrufen wenn du nicht am anfang

    using namespace std;
    

    schreibst. Dieses "using namespace" bringt dass du dieses std:: vor allen Funktionen etc weglassen kannst die in dem Namespace deklariert wurden.
    Namespaces werden meistens dazu benutzt um in großen Projekten die gleichen Variablen- oder Klassennamen verwenden zu können. Du könntest dir auch einen eigenen Namespace anlegen und deine Funktionen etc. in ihm schreiben. dann würden sich diese aber auch nur mit

    NameDeinesNamespace::NameDeinerFunktion
    

    aufrufen lassen. Dort könntest du dann auch eine eigenes Objekt "cout" erstellen das sich mit

    NameDeinesNamespace::cout
    

    aufrufen ließe und überhaupt nichts mit dem anderen cout zu tun hat. Aber da ich nicht glaube dass du das brauchst lass ichs mal weg.

    Order

    edit: tolower(char irgendwas) macht aus einem Großbuchstaben einen Kleinbuchstaben.



  • davie schrieb:

    #include <iostream> 
    #include <cctype>
    using namespace std;
    
    int main (){ 
        int a, nochmal; 
        do{ 
           cout << "Geben Sie ein Zahl ein: " << endl; 
           cin >> a; 
           cout << a % 5 << endl; 
           cout <<"Nochmal (J/N): " << endl; 
           cin >> nochmal; 
        } 
        while(nochmal == 'j' || 'J'); 
    }
    

    die schleife würde zwar bei der eingabe von j oder J wiederholt werden aber die schleife würde nicht nur bei n bzw N beendet werden, sondern bei jeder anderen taste als j/J.. wie könnte man das am besten realisieren?
    ich hätte spontan irgendwie gedacht:

    while (nochmal != 'j' || nochmal != 'n')
       cout << "Fehlerhafte Eingabe" << endl;
    

    nich schlagen :D... was ist daran falsch?



  • so hab ich das auch mal versucht, ohne erfolg



  • CruelDiscovery schrieb:

    ich hätte spontan irgendwie gedacht:

    while (nochmal != 'j' || nochmal != 'n')
       cout << "Fehlerhafte Eingabe" << endl;
    

    nich schlagen :D... was ist daran falsch?

    Dein if-Ausdruck ist immer wahr. Wenn nochmal nicht nicht 'j' (also eben doch 'j') ist, dann ist es mit Sicherheit nicht 'n' (weil es ja 'j' ist).

    Also:

    while(!(nochmal == 'j' || nochmal == 'n'))

    oder:

    while(nochmal != 'j' && nochmal != 'n')



  • ja klar.. im nachhinein logisch, dass es nicht ging.. danke für deinen lösungsvorschlag..



  • da ist das find ich gut erklährt
    mit namespace

    http://www.schornboeck.net/ckurs/inhalt.htm

    ps: matze hättest mich doch auch fragen gekonnt 😃


Anmelden zum Antworten