do - while Schleife funktioniert nicht???



  • Hallo C++er,
    Mein Prgramm rechnet dezimal in hexadezimal um.
    Wenn ich wie aufgefordert eine Eingabe machen, zeigt mir die Konsole dem entsprechend die Zahl in hex an. Ich habe eine Schleife eingebaut die. Es soll Die Konsole wieder auf eine Eingabe warten. Tut sie aber nicht!
    Hier mein Code:

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main()
    {
        long dec;
    
        cout << "Bei Eingabe '0', wird das Programm beendet!" << endl;
        cout << endl;
        do{   
        cout << "Zahl im Zehnersystem: ";
        cin >> dec;
        }while(0);
        switch(dec){
                    case 0: return 0;
                    default: printf("Zahl im Hexadezimalsystem: %x\n", dec);
        }
        cin.ignore(); 
        cin.get();  
    }
    

    danke euch schon mal!



  • Prüf mal deine Schleifenbedingung und überlege dir, wie oft eine falscher boolscher Ausdruck zutrifft.



  • achso. ok. Hab ich was falch vrstanden.
    Jetzt hab ich das programm so wie es sein soll.
    Danke dir!



  • std::cout << "Zahl im Hex-System: " << std::hex << dec << std::endl;
    

    magst du wohl nicht?

    do{   
        cout << "Zahl im Zehnersystem: ";
        cin >> dec;
        }while(0);
        switch(dec){
                    case 0: return 0;
                    default: printf("Zahl im Hexadezimalsystem: %x\n", dec);
        }
    

    macht alles nicht so sehr viel sinn, oder?!

    do
        {   
          cout << "Zahl im Zehnersystem: ";
          cin >> dec;
          cout << "Zahl im Hex-System: " << hex << dec << endl;
        } while(dec);
        cin.ignore();
        cin.get();
    

    bb

    edit:
    hex erfordert einen neuen header: #include <ios>
    danach solltest du den stream logischerweise wieder auf das normale format bringen: std::dec - was aber direkt zu einem problem führt und zeigt, wieso using namespace std; eben doch nicht so toll ist - du wirst deine variable umbennen müssen (oder das using namespace wegmachen und dafür immer std:: mitschreiben)
    außerdem würde ich die ausgabe an deiner stelle ändern: dem hex-wert würde ich noch ein 0x vorstellen - ist aber wohl geschmackssache...


  • Administrator

    unskilled schrieb:

    hex erfordert einen neuen header: #include <ios>

    Unsinn. <iostream> reicht da völlig aus. Nur für ein paar wenige reicht <iostream> nicht aus, wenn ich mich recht erinnere, waren es nur die Manipulatoren mit Parametern. Allerdings bindet man für diese nicht <ios> ein, sondern <iomanip> .

    unskilled schrieb:

    außerdem würde ich die ausgabe an deiner stelle ändern: dem hex-wert würde ich noch ein 0x vorstellen - ist aber wohl geschmackssache...

    http://www.cplusplus.com/reference/iostream/manipulators/showbase/

    Grüssli



  • http://www.cplusplus.com/reference/iostream/manipulators/hex/

    sagt, dass es im header ios zu finden ist (oben rechts stehts ganz unscheinbar) ^^
    ich weiß aber gerade nicht, ob iostream den vll lt. standard schon included - auf oben genannter webseite kommt man jedenfalls sowohl über iostream als auch ios auf std::hex ...

    bb



  • hex kommt laut standard aus <ios>, wo auch ios_base definiert ist, soweit ich das sehen konnte. Allerdings dürften viele (aber nicht unbedingt alle) Implementierungen <ios> indirekt in <iostream> einbinden. Ich würd trotzdem sicherheitshalber <ios> einbinden.


Anmelden zum Antworten