Kniffel in CPP, der Compiler meckert nur



  • Hallo Leute, ich wollte das Würfelspiel Kniffel in CPP umsetzen, nur es ist noch lange nicht fertig, ich muss aber unbeding rauskriegen, was der Compiler hier alles zu meckern hat!
    Werft einen Blick auf alles, was grün ist, dann könnt ihr mir vielleicht helfen!

    #include <iostream>   //woran meckert der Compiler hier: "Unerwartete Symbole nach Praeptozessor-Direktive "?                                                                          
    #include <ctime>      // das brauche ich hier nicht, oder?
    #include <windows.h>  // ist das für rand zuständig?                                                                           
    using namespace std;
    //wo bekomme ich eine Liste über alle verfügbaren Header und die Befehle, die man durch sie nutzen kann?
    
    int zahlen[6];
    int w1;       //lassen sich die "vielen" deklarationen verkürzen?                                                                                 
    int w2; 
    int w3;
    int w4;
    int w5;
    
    int einser;
    int zweier;
    int dreier;
    int vierer;
    int fuenfer;
    int sechser;
    
    int wuerfel;
    
    int main()
    { 
    
    while(true) //Endlosschleife
    	{
    	srand(time(NULL)); 
    	for(int i=0;i=3;i++) // wie oft gewürfelt wird                                              
    	{
    	    //eigentlich wird nach jedem würfeln gefragt, ob man die Zahlen behalten möchte, wenn nicht, werden sie neu "ausgewürfelt"
    		for(wuerfel=0;wuerfel==5;++wuerfel)
    		{
    		int zahl=rand()%11;
    		zahlen[wuerfel]=zahl;
    		if zahlen[wuerfel]=0
    			w1=w1+1;
    		//else			/*		Was hat der Compiler am Else auszusetzen? Deshalb hab eich es raus genommen
    		//	;                     "else ohen zugehöriges if"   */
    		if zahlen[wuerfel]=1
    			w2=w2+1;
    		//else
    		//	;
    		if zahlen[wuerfel]=2
    			w3=w3+1;
    		//else
    		//	;
    		if zahlen[wuerfel]=3
    			w4=w4+1;
    		//else
    		//	;
    		if zahlen[wuerfel]=4
    			w5=w5+1;
    		//else
    		//	;
    		if zahlen[wuerfel]=5
    			w6=w6+1;
    		//else
    		//	;
    		};
    
    	}
    
    /*********************auswertung ab hier***********************/ 
    
    cout<<"Deine Zahlen sind"<<w1<<" Eisen; "<<w2<<" Zweien; "<<w3<<" Dreien; "<<w4<<" Vieren; "<<w5<<" Fuenfen"<<endl;
    	cout<<"Waehle!"<<endl;
    	cout<<"Einser   <1>"<<endl;
    	cout<<"Zweier   <2>"<<endl;
    	cout<<"Dreier   <3>"<<endl;
    	cout<<"Vierer   <4>"<<endl;
    	cout<<"Fuenfer  <5>"<<endl;
    	cout<<"Sechser  <6>"<<endl;
    
    	cout<<"Deine Eingabe: ";
    	int befehl;
    	cin>>befehl;
    
    	//Befehl bearbeiten
    	switch(befehl)
    	{
    	case 1: cout<<"Die Summe der Einser betraegt ";<<w1<<endl;//"Syntaxfehler : Fehlendes ';' vor '<<' "		       
    	break;                                                    //wohin muss das ';', dass ich übersehen habe und warum?  
    	case 2: cout<<"Die Summe der Zweier betraegt "<<w2*2<<endl;		
    	break;
    	case 3: cout<<"Die Summe der Dreier betraegt "<<w3*3<<endl;		
    	break;
    	case 4: cout<<"Die Summe der Vierer betraegt "<<w4*4<<endl;
    	break;
    	case 5: cout<<"Die Summe der Fuenfer betraegt "<<w5*5<<endl;
    	break;
    	case 6: cout<<"Die Summe der Sechser betraegt "<<w6*6<<endl;
    	break;
    	};
    cout<<"Einser "<<einser<<endl;
    cout<<"Zweier "<<zweier<<endl;
    cout<<"Dreier "<<dreier<<endl;
    cout<<"Vierer "<<vierer<<endl;
    cout<<"Fuenfer "<<fuenfer<<endl;
    cout<<"Sechser "<<sechser<<endl;
    
    }
    }; 
    //Muss ich das verbessern? "warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ereignistyp 'void' angenommen"
    //Heißt dass, ich muss return 0 hinschreiben oder muss er etwas ganz anderes zurückgeben?
    


  • OMFG! 😮



  • case 1: cout<<"Die Summe der Einser betraegt ";/*das ; ist falsch*/<<w1<<endl;
    

    Letzte Simokolon ist überflüssig.

    Vor der letzten } ein return 0; setzen.

    Bei mir meckerte er wegen #include "stdafx.h" das der fehlt.

    if (zahlen[wuerfel]==0) so muss deine if aussehen.

    Ein = ist etwa a=b; == ist der Vergleichsoperand(mir fiel nix besseres ein).

    int w6; fehlt noch.

    Und das kannst du kompakter schreiben mit w[6]; zb.



  • Mr.Markus schrieb:

    //lassen sich die "vielen" deklarationen verkürzen?

    ein wenig verkürzter und übersichtlicher :

    int w1, w2, w3, w4, ...
    

    Gruß
    :: NoName ::



  • noch ein tip:
    statt der vielen deklarationen für eins, zwei, drei, ... würde ich auch gleich nen array nehmen. da haste dann auch den vorteil wenn du mal auf alle werte zu greifen musst dann kannst du das ganz einfach in ner for - schleife machen:

    for (int i = 0; i < 6; i ++)
        iDeinArray[i] = 1000;
    

    und müsstest nicht alles umständlich machen:

    einser = 1000;
    zweier = 1000;
    dreier = 1000;
    ...
    


  • iss aber ordentliches hardcore - MFC 🤡



  • Danke Leute! Das sind so Feinheiten, die mal schnell mal übersieht.... Gibt es in CPP auch so eine Regel, dass ich nach

    if(bedingung)
    

    direkt die Operation schreiben kann und mir so das

    if(bedingung)
    w2=w2+1
    else
    ;
    

    "Abfackeln" von Else sparen kann? Oder kann ich auch unter anderen Bedingungen af das Else verzichten?
    ich meine das ungefähr so

    if(wenn das) tue dies
    

    , so dass ich ganz auf das else verzichten kann...
    Und nochmals danke, das verbessere ich nachher gleich!



  • Natürlich kannst du auf das else verzichten (!) das else musst nicht 'leer' hinschreiben !

    Gruß
    :: NoName ::


Anmelden zum Antworten