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?