Kezdőoldal » Számítástechnika » Programozás » Mi a baj ezzel a C++ programmal?

Mi a baj ezzel a C++ programmal?

Figyelt kérdés

Í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!



2017. nov. 3. 22:28
 1/5 tabaki ***** válasza:
Mi a tünet? Hibaüzenet?
2017. nov. 3. 23:01
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
Biztos mert elírtad azt hogy Margherita meg hogy prosciutto
2017. nov. 3. 23:03
Hasznos számodra ez a válasz?
 3/5 tabaki ***** válasza:

@#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.

2017. nov. 3. 23:19
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
100%

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.

2017. nov. 4. 02:12
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
Ez valami találóskérdés?
2018. aug. 3. 06:50
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!