2017-11-30 7 views
0

Ich habe einen Auftrag für die Schule, sehr einfach, nur Burger aus einem Joint bestellen und berechnen die Kosten. Ich habe versucht, eine if-Anweisung zu verwenden, um sicherzustellen, dass der Benutzer ihre Reihenfolge mag, aber es gibt mir weiterhin Fehler, ob meine Variable "yesorno" eine Zeichenfolge oder ein Zeichen ist. kann nicht setzen, wenn Anweisung in Schleife C++

#include <cstdlib> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
char yesorno; 
int burgers, fries, drinks; 
int i=0; 
while (i=0) { 
    cout<<"Aidan: 'Welcome to the Christopher Burger Joint!\nOur burgers are $4.00, fries are $2.50, and drinks are $1.50."; 

    cout<<"\nHow many burgers will you be having today?"; 
    cin>>burgers; 
    cout<<"\nHow many fries will you be having today?"; 
    cin>>fries; 
    cout<<"\nand how many drinks for you today?"; 
    cin>>drinks; 
    cout<<"\nSo here is your current order:\nBurgers: "<<burgers<<"\nFries: "<<fries<<"\nDrinks: "<<drinks; 
    cout<<"Is this all?\nYes or No: "; 
    cin>>yesorno; 
    if (yesorno = "yes") { 
     i=2; 
    } 

} 
int grosstotal = (burgers*4)+(fries*2.5)+(drinks*1.5); 
int tax = grosstotal*.12; 
int total = tax+grosstotal; 
cout<<"\nYour total before tax is $"<<grosstotal<<",\nYour tax is $"<<tax<<",\nAnd your total today is $"<<total<<".\nEnjoy!'"; 


return 0; 
} 
+4

Sie ordnen yesorno "ja" zu und prüfen nicht, ob es gleich ist. Das ist vielleicht nicht das einzige Problem, aber '==' prüft auf Gleichheit, '=' ist Zuweisung. – chrisz

+0

Kompilieren ohne Warnungen schlägt wieder. –

+0

@chris Ich habe das zweite Gleichheitszeichen hinzugefügt, aber jetzt gibt es mir einen neuen Fehler entsprechend der if-Anweisung "error: ISO C++ verbietet den Vergleich zwischen Zeiger und Integer [-fpermissiv]" –

Antwort

1
#include <cstdlib> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    string yesorno; 
    int burgers, fries, drinks; 
    int i=0; 
    while (i==0) { 
     cout<<"Aidan: 'Welcome to the Christopher Burger Joint!\nOur burgers are $4.00, fries are $2.50, and drinks are $1.50."; 

     cout<<"\nHow many burgers will you be having today?"; 
     cin>>burgers; 
     cout<<"\nHow many fries will you be having today?"; 
     cin>>fries; 
     cout<<"\nand how many drinks for you today?"; 
     cin>>drinks; 
     cout<<"\nSo here is your current order:\nBurgers: "<<burgers<<"\nFries: "<<fries<<"\nDrinks: "<<drinks; 
     cout<<"Is this all?\nYes or No: "; 
     cin>>yesorno; 
     if (yesorno == "yes") { 
      i=2; 
     } 

    } 
    int grosstotal = (burgers*4)+(fries*2.5)+(drinks*1.5); 
    int tax = grosstotal*.12; 
    int total = tax+grosstotal; 
    cout<<"\nYour total before tax is $"<<grosstotal<<",\nYour tax is $"<<tax<<",\nAnd your total today is $"<<total<<".\nEnjoy!'"; 


    return 0; 
} 

Dies funktioniert für mich. Du hast ein paar == vermisst.

+0

'yesorno ==" yes "' ist falsch, wenn 'yesorno' vom Typ' char' ist .... –

+0

Nicht nur Code eingeben, erklären, was im Originalcode falsch war und wie Sie es behoben haben. – Barmar

+0

Das hat perfekt funktioniert, vielen Dank! –

0

Eigentlich ist man String ja auf die Variable yesorno zuweisen, die Sie falsch es tun = ein Zuweisungsoperator für die Verwendung == Vergleich zum Vergleich insted so

if (yesorno = "yes") { 
     i=2; 
    } 

Schreib

if (yesorno == "yes") { 
    i=2; 
} 

. In diesem

+1

'yesorno ==" yes "' ist falsch, wenn 'yesorno' vom Typ' char' ist .... –

+0

Kannst du bitte rechtfertigen? –

+0

'" yes "' ist ein String-Literal, das zu einem 'char *' zerfällt, wenn es mit dem Vergleichsoperator '==' verwendet wird. Sie vergleichen also einen Zeichenwert mit einem Zeigerwert, der selten Sinn macht. –

2

Für den Anfang ist es Zuweisung statt Vergleich in dieser while-Anweisung

while (i=0) { 
     ^^^ 

if-Anweisung

if (yesorno = "yes") { 
      ^^^ 

gibt es wieder Zuordnung statt Vergleich.

Um vom Benutzer eine Zeichenfolge wie diese "yes" zu akzeptieren, sollte die Variable yesorno mit dem Typ std::string deklariert werden.

Anstelle der while Schleife ist es besser, eine do-while Schleife zu verwenden. Zum Beispiel

int main() { 
    string yesorno; 
    int burgers, fries, drinks; 

    do { 
     //... 

     cin>>yesorno; 
    } while (yesorno != "yes"); 

Auch Sie können den Header <cstdlib> entfernen, da weder Erklärung aus dem Header im Programm verwendet wird.

Verwandte Themen