array spuckt falsche Zahlen raus?



  • Hallo, ich bin neu im Forum und bin auch ein C++ Anfänger.
    Mein Problem ist, dass mir das Programm einen falschen Wert ausspuckt.
    Code:
    // Produkte
    string a = "Schokolade";
    string b = "Lolipop";

    // Preise
    int preis[2];
    preis[0] = 2;
    preis[1] = 3;

    // Nummer von Produkten
    int nummer[2];
    nummer[0] = 0;
    nummer[1] = 1;

    // Mittelsatz
    string dann = ", dann druecken Sie ";

    // Anzeige von Produkten
    cout << a << dann << nummer[0] << endl
    << b << dann << nummer[1] << endl;

    // Eingabe von Produkt
    char auswahl;
    cin >> auswahl;

    // Ausgabe von ausgewähltem Produkt
    switch(auswahl) {
    case '0':
    case 'o':
    case 'O':
    cout << "Sie haben " << a << " ausgewaehlt" << endl << "Das kostet Sie " << preis[auswahl] << " CHF";
    break;

    case '1':
    cout << "Sie haben " << b << " ausgewaehlt" << endl << "Das kostet Sie " << preis[auswahl] << " CHF";
    break;
    default:
    cout << "Ungueltige Eingabe!";
    }

    wenn ich jetzt z.B. Nummer 0 eingebe, bekomme ich 0.
    wenn ich 1 eingebe, bekomme ich 2130567168. (?????)

    Ich hoffe Ihr könnt mir helfen 🙂



  • haisi schrieb:

    Code:
            // Produkte
        string a = "Schokolade";
        string b = "Lolipop";
        
               // Preise
        int preis[2];
            preis[0] = 2;
            preis[1] = 3;
        
               // Nummer von Produkten
        int nummer[2];
            nummer[0] = 0;
            nummer[1] = 1;     
            
               // Mittelsatz
        string dann = ", dann druecken Sie ";  
            
               // Anzeige von Produkten
        cout << a << dann << nummer[0] << endl
        << b  << dann << nummer[1] << endl;
        
             // Eingabe von Produkt
        char auswahl;
        cin >> auswahl;
        
            // Ausgabe von ausgewähltem Produkt
        switch(auswahl) {
                        case '0':
                        case 'o':
                        case 'O':
                             cout << "Sie haben " << a << " ausgewaehlt" << endl << "Das kostet Sie " << preis[auswahl] << " CHF";
                        break;
                        
                        case '1':
                             cout << "Sie haben " << b << " ausgewaehlt" << endl << "Das kostet Sie " << preis[auswahl] << " CHF";
                        break;
                        default:
                             cout << "Ungueltige Eingabe!";                                   
    }
    

    cpp Tags sind schon was Tolles..

    Und dein Fehler: Die Überladung von >> für char liest auch einen char ein, also einen Buchstaben. '0' ist != 0. (Und 'o' und 'O' erst recht, keine Ahnung was du dir dabei gedacht hast.)
    Die meisten Systeme nutzen einen ASCII kompatiblen Zeichensatz, guck dir mal die Tabelle auf Wikipedia an.



  • @cooky451: Formattierung ist doch auch toll.

    Es liegt daran, dass der char den ASCII-Wert beinhaltet, also bei '0' z.B. den Wert 48 hat. Dafür musst du also

    cout << "Sie haben " << a << " ausgewaehlt" << endl << "Das kostet Sie " << preis[auswahl - '0'] << " CHF";
    

    schreiben.

    Edit: Natürlich musst du die Abfragen für 'o' und 'O' wegmachen, nicht nur wegen oben sondern aus logischen Gründen.

    Oah, cooky! Schneller als ich, wa?


Anmelden zum Antworten