Mi a baj ezzel a C++ programmal?
Írtam egy étterem simulatort és van benne egy hiba:
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "hun");
int margaritha = 1250;
int proscuitto = 1250;
int ananase = 1550;
int hawaii = 1400;
int cappy = 350;
int coke = 450 ;
int Kinleytonic = 450;
int Nestea = 350;
int ar = 0, db, db2, kp, ar2 = 0;
string poru, etorit;
string inni;
cout << "étterem simulator 2000 (alpha version 0.5)" << endl;
system("pause");
system("cls");
cout << "Mit kívánsz?" << endl;
getline(cin, poru);
if (poru == "Pizza,ital" || "pizza") {
cout << "Pizzák:\n\nMargaritha\t\t1250Ft\nProscuitto\t\t1250\nAnanase\t\t\t1550Ft\nHawaii\t\t\t1400Ftqn\n\nÜdítők: \n\nCappy\t\t350Ft\ncoke\t\t450Ft\ntonic\t\t450\nNestea\t\t350\n" << endl;
}
cout << "Most válssz ételt!" << endl;
getline(cin, etorit);
if (etorit == "Margaritha") {
ar = ar + 1250;
}
if (etorit == "Proscuitto") {
ar = ar + 1250;
}
if (etorit == "Ananase") {
ar = ar + 1550;
}
if (etorit == "Hawaii") {
ar = ar + 1400;
}
cout << "Hány darabot?" << endl;
cin >> db;
cout << "Milyen üdítőt adhatok?\n" << endl;
//itt van a hiba: nem olvastatja be az "inni" változót, és emiatt nem jól írja ki az árakat
getline(cin, inni);
if (inni == "cappy") {
ar2 = ar2 + 350;
}
if (inni == "coke") {
ar2 = ar2 + 450;
}
if (inni == "tonic") {
ar2 = ar2 + 450;
}
if (inni == "nestea") {
ar2 = ar2 + 350;
}
cout << "Hány darabot?" << endl;
cin >> db2;
cout << "Mennyi pénzed van?" << endl;
cin >> kp;
ar = ar*db + ar2*db2;
cout << "Összesen: " << ar << "Ft" << endl;
if (kp > ar) {
cout << "A kártyádról levontunk " << ar << "Ft-ot\nMaradt pénz: " << kp - ar << "Ft" << endl;
}
else if (kp < ar) {
cout << "A kártyádon nics elegendő pénzösszeg!" << endl;
}
system("pause");
return 0;
}
Válaszokat előre köszönöm!
@#2:
Van még helyesírási hiba bőven, de az ráér...
@Kérdező:
Bocs, most már észrevettem a megjegyzést, de nekem több másikat is átugrik véletlenszerűen. Most nézegetem.
Hirtelen a probléma az, hogy cin>> után használsz getline-t. Miért baj ez? Nos a >> operátor egy okos dolog, csak annyit olvas be, amennyit aza dott típusra rá tud illeszteni. Egy szám esetén pl az első whitespace-nél (pl sortörés) megáll, ami azt jelenti, hogy a sortörés maga bent marad a cin bufferében. Ekkor jön a getline, ami az első sortörésig olvas, és mivel cin-ben bent maradt egy sortörés, azt megeszi, és beolvassa a nagy semmit. Ha cin után akarsz getline-t használni, készülj fel, hogy gyakran ürítened kell a bufferben ragadt sortörést, vagy akármit.
cin.ignore(INT_MAX,'\n') használható arra, hogy legfeljebb INT_MAX karaktert kiüríts a cin bufferéből egészen a lgelső sortörés jelig. Ez az ignore egyébként bármilyen istream-en használható, így pl fájlbeolvasásnál is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!