Anfänger in C++ kommt nicht weiter bekomme immer einen fehler bei if Befehl



  • Guten Tag liebe Community,

    da ich ein neuling bin was das Programmieren betrifft versuche ich gerade eine kleine art vom Wer wird Millionär zu machen.

    Doch da ist auch schon mein erstes Problem.

    Wenn ich die Eingabe der Antwort mache sollte er ja testen ob die Antwort die Richtige ist jedoch bekomme ich das nicht hin, da er mich nicht == a ausführen läst.

    Hier mal mein Code:

    // Wer wird Millionär.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	cout << " Hallo und Willkommen bei Wer wird Millionär" <<endl; 
    
    	getchar();
    
    	cout << "Bitte gib nun deinen Namen ein!" <<endl; 
    
    	string Name;
    
    	cin >> Name;
    
    	getchar ();
    
    	cout << "OK " <<Name <<",lass uns beginnen!" <<endl;
    
    	getchar();
    
    	/*Frage 1 */
    
    	cout << "Die 100€ Frage lautet: " "/n Welche Farbe hat die Milch?" <<endl; getchar();
    	cout << " a - Gelb         b- Weiss" <<endl;
    	cout << " c - Lila         d- Gruen" <<endl; getchar();
    
    	char Frage1;
    	cin >> Frage1 ;
    
    	getchar ();
    
    	if (Frage1 == a )
    
    	{ 
    		cout <<"Richtig " <<Name <<" du hast soebend 100€ gewonnen" <<endl; 
    	}
    
    	else
    
    	{
    
    		cout <<"Leider Falsch " <<Name <<" du hast leider nichts gewonnen /n versuch es doch gleich nochmal" <<endl; 
    	}
    
    getchar();
    
    	return 0;
    }
    


  • Wenn du

    if (Frage1 == a )
    

    schreibst meckert der Compiler, da er erwartet, dass a eine Variable ist.

    Mach mal:

    if (Frage1 == 'a' )
    

    Dann weiss der Compiler, dass du den character a meinst und nicht irgend eine Variable.

    Benutze das nächste mal bitte C/C++ Tags. Sonst kann man den Code kaum lesen 😉



  • Vielen Dank, und mein Beitrag habe ich schon editiert, damit er leserlicher ist 😉



  • Kann mann das ganze eigentlich verständlich auch einfach gestallten gerade das wollen Sie weiter spielen angeht ?

    // Wer wird Millionär.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	cout << " Hallo und Willkommen bei Wer wird Millionaer" <<endl; 
    
    	getchar();
    
    	cout << "Bitte gib nun deinen Namen ein!" <<endl; 
    
    	string Name;
    
    	cout<< "Mein Name lautet:" ; cin >> Name;
    
    	getchar ();
    
    	cout << "OK " <<Name <<",lass uns beginnen!" <<endl;
    
    	getchar();
    
    	/*Frage 1 */
    
    	cout << "Die 50 Euro Frage lautet: " " Welcher ""Vogel"" hat keine Federn?" <<endl; getchar();
    	cout << " a - Blaumeise         b- Gruenschnabel" <<endl;
    	cout << " c - Rotkehlchen       d- Goldammer" <<endl; getchar();
    
    	char Frage1;
    	cout<< "Deine Antwort lautet?:"; cin >> Frage1 ;
    
    	getchar ();
    
    	if (Frage1 == 'b' )
    
    	{ 
    		cout <<"Richtig " <<Name <<" du hast soebend 50 Euro gewonnen" <<endl; 
    	}
    
    	else
    
    	{
    
    		cout <<"Leider Falsch " <<Name <<" du hast leider nichts gewonnen versuch es doch gleich nochmal" <<endl; 
    	getchar();
    		return 0; 
    	}
    	getchar();
    
    	char Antwort1;
    	cout <<"So " <<Name <<" du bist nun bei 50 Euro, moechtest du weiter spielen?" <<endl;
    	cout <<"(j)a oder (n)ein?" <<" Deine Antwort lautet: " ; cin >> Antwort1;
    
    	if (Antwort1 =='j')
    	{
    		cout << "Super " << Name << " dann spielen wir nun um 100 Euro!" <<endl;
    		getchar();
    	}
    	else
    	{
    		cout << "Ok, " <<Name << " dann gehst du mit 50 Euro nach Hause" <<endl;
    	cout << " !!Herlichen Glueckwunsch " <<Name <<" gewinnt 50 Euro!!" <<endl;
    	cout << "Wir freuen uns auf die naechste Runde von Wer wird Millionaer"<<endl; getchar();
    
    	getchar();
    		return 0;
    	}
    	getchar();
    
    	/*Frage 1 zu ende*/
    
    	/*Frage2 */
    
    	cout << "Die 100 Euro Frage lautet: " " Was findet man in vielen Baedern?" <<endl; getchar();
    	cout << " a - Waschbecken-Bukett         b- Wannen-Gebinde" <<endl;
    	cout << " c - WC-Garnitur                d- Bidet-Strauss" <<endl; getchar();
    
    	char Frage2;
    	cout<< "Deine Antwort lautet?:"; cin >> Frage2 ;
    
    	getchar ();
    
    	if (Frage2 == 'c' )
    
    	{ 
    		cout <<"Richtig " <<Name <<" du hast soebend 100 Euro gewonnen" <<endl; 
    	}
    
    	else
    
    	{
    
    		cout <<"Leider Falsch " <<Name <<" du hast leider nichts gewonnen versuch es doch gleich nochmal" <<endl; 
    	getchar();
    		return 0;
    	}
    
    	char Antwort2;
    	cout <<"So " <<Name <<" du bist nun bei 100 Euro, moechtest du weiter spielen?" <<endl;
    	cout <<"(j)a oder (n)ein?" <<" Deine Antwort lautet: " ; cin >> Antwort2;
    
    	if (Antwort2 =='j')
    	{
    		cout << "Super " << Name << " dann spielen wir nun um 500 Euro!" <<endl;
    		getchar();
    	}
    	else
    	{
    		cout << "Ok, " <<Name << " dann gehst du mit 100 Euro nach Hause" <<endl;
    	cout << " !!Herlichen Glueckwunsch " <<Name <<" gewinnt 100 Euro!!" <<endl;
    	cout << "Wir freuen uns auf die naechste Runde von Wer wird Millionaer"<<endl; getchar();
    
    	getchar();
    		return 0;
    	}
    
    getchar();
    
    /*Frage3*/
    
    cout << "Die 500 Euro Frage lautet: " " Wenn man ueber genuegend Bargeld verfuegt, dann ist man...?" <<endl; getchar();
    	cout << " a - perfide         b- liquide" <<endl;
    	cout << " c - stupide         d- morbide" <<endl; getchar();
    
    	char Frage3;
    	cout<< "Deine Antwort lautet?:"; cin >> Frage3 ;
    
    	getchar ();
    
    	if (Frage3 == 'b' )
    
    	{ 
    		cout <<"Richtig " <<Name <<" du hast soebend 500 Euro gewonnen" <<endl; 
    	}
    
    	else
    
    	{
    
    		cout <<"Leider Falsch " <<Name <<" du hast leider nichts gewonnen versuch es doch gleich nochmal" <<endl; 
    
    		getchar();
    		return 0;
    	}
    
    getchar();
    
    char Antwort3;
    	cout <<"So " <<Name <<" du bist nun bei 500 Euro, moechtest du weiter spielen?" <<endl;
    	cout <<"(j)a oder (n)ein?" <<" Deine Antwort lautet: " ; cin >> Antwort3;
    
    	if (Antwort3 =='j')
    	{
    		cout << "Super " << Name << " dann spielen wir nun um 1000 Euro!" <<endl;
    		getchar();
    	}
    	else
    	{
    		cout << "Ok, " <<Name << " dann gehst du mit 500 Euro nach Hause" <<endl;
    	cout << " !!Herlichen Glueckwunsch " <<Name <<" gewinnt 500 Euro!!" <<endl;
    	cout << "Wir freuen uns auf die naechste Runde von Wer wird Millionaer"<<endl; getchar();
    
    	getchar();
    		return 0;
    	}
    
    	return 0;
    }
    


  • Ich würde dir vector<> und eine Schleife empfehlen, anstatt den Code fünfzehn Mal zu kopieren.



  • Ok wenn du da vieleicht nen kleines anschaungs Beispiel für mich hättest, denn wie gesagt ich bin noch ganz neu dabei. Habe gestern erst damit angefangen.



  • Da ist das aber ein ehrgeiziges Vorhaben 👍 Die meisten beginnen eher mit einem "Hello World".

    Für den Ansatz benötigst du als erstes eine Struktur, die die Fragen (und Antworten) zusammenfasst:

    struct QuizFrage
    {
      string frage, antwort[4];
      int richtig;
    };
    

    Der nächste Schritt besteht darin, einen vector<QuizFrage> anzulegen und zu füllen, und dann kannst du mit einer Schleife die Fragen ausgeben und die Antworten des Nutzers mit der korrekten Lösung vergleichen.



  • Hmm werde es mir mal anschauen und versuchen um zu setzten, das Hallo Welt, hatte ich gestern auch schon gemacht genau wie das Fahrenheit in Celsius umrechnen, war mit aber zu langweillig 😉

    Habe mir gestern glaube ich 4 Stunden lang Videos bzw. Tuts bei Youtube angeschaut und einfach mal los gelegt?

    Brauche ich dafür (vektor) eigentlich ne neue Bibliothek die dazugeladen werden muss?



  • Patejoker schrieb:

    Habe mir gestern glaube ich 4 Stunden lang Videos bzw. Tuts bei Youtube angeschaut und einfach mal los gelegt?

    Nur ein Tip: Besorg dir ein gutes Buch und lies dich dort ein 😉

    Brauche ich dafür (vektor) eigentlich ne neue Bibliothek die dazugeladen werden muss?

    Nein, nur den Header <string>



  • Wenn ich das nun versuche umzusetzen sieht der erste Teil so aus:

    // Wer wird Millionär.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct QuizFrage
    {
      string frage, antwort[4]; 
      int richtig;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	QuizFrage Fragen;
    
    	Fragen.frage = "Welcher ""Vogel"" hat keine Feder?";
    	Fragen.antwort = "a - Blaumeise         b- Gruenschnabel   c - Rotkehlchen       d- Goldammer "; /*Hier kommt ne Fehler
    																									 meldung das der Ausdruck eine 
    																									 veränderbare Ivalue sein muss*/
    

    Nur Frage ich mich jetzt wie ich die 4 Antworten hinschreiben muss und wie ich Ihm sagen kann welche die Richtige ist? Desweiteren wenn ich zur Frage 2 komme muss ich das auch ein

    QuizFrage Fragen2
    

    erstellen?



  • antwort ist ein Array, da mußt du die Elemente einzeln füllen (alternativ baust du dir einen Konstruktor, der 5 Strings und einen int schluckt und selbständig verteilt). Und für jede Frage eine eigene Variable anzulegen halte ich für sinnlos, genau dafür wurden Arrays und Containerklassen (wie vector<>) erfunden.



  • Erst mal danke ich dir das du dir die Zeit genommen hast mir ein wenig unter die Arme zu greifen. Werde mir nun mal die Sache mit den Arrays anschauen 😉

    Mal sehen ob ich das Heute noch was hinbekomme



  • Ich versuche gerade was was ich sowieso net so einfach hinbekomme, ich denke mal ich habe irgendwo nen Denk fehler, denn wie bekomme ich jetzt ohne ne if SChleife den Vergleich ob die Antwort Richtig war und gehe dann zur 2ten Frage

    Hier mal mein Code:

    // Wer wird Millionär.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct QuizFrage
    {
      string frage; 
     string antwort[4]; 
      int richtig;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	QuizFrage Fragen;
    
    	Fragen.frage = "Welcher ""Vogel"" hat keine Feder?";
    	Fragen.antwort[0] = "a- Supermann";
    	Fragen.antwort[1] = "b- Batman";
    	Fragen.antwort[2] = "c- Spiedermann"; 
    	Fragen.antwort[3] = "d- Meine kleine Maus";
    
    	cout << Fragen.frage <<endl;
    	cout << Fragen.antwort[0]<<" " << Fragen.antwort[1]<<" " << Fragen.antwort[2]<<" " << Fragen.antwort[3] <<endl;
    
    	getchar();
    
    	string Antwort1;
    	cout << " Die richtige Antwort lautet: " ; cin >> Antwort1 ;
    

    Ich denke das wird einfacher sein wenn ich bei dem ganzen if **** bleibe, oder ?!



  • das if kannst du auch behalten (solange du keine Schleife draus machst), aber du solltest die richtige Antwort noch belegen:

    char antwort; //reicht völlig für a..d
    cout>>"Die Antwort lautet: "<<flush; cin>>antwort;
    if(tolower(antwort)-'a'==Fragen.richtig)
      cout<<"richtig"<<endl;
    

    PS: Um Anführungszeichen in Strings zu verwenden, nimmt man übrigens \"


Log in to reply