C++ C++ Versuche Zählen Anfängerproblem

exe.cuT_Ted

Newbie
Registriert
Aug. 2016
Beiträge
4
Hallo leute,

Ich habe vor 3 tagen als komplettanfänger mit der online tutorial reihe: C++ Crash Kurs von Orange On Black angefangen.



Und habe bisher 4-5 kleine Anwendungen geschafen wie z.B mein kleines Zahlen Rate Spiel bei dem ich ein Problem habe die
so "bekannte" for schleife richtig anzuwenden um die versuche des Spielers einschränken zu können und ihm diese auch anzuzeigen.

Kleine Randnotiz:

Es tut mir leid wenn mein code grauenhaft aussieht ,ich vieles unnötigerweise komplizierter gemacht habe als es nötig ist
oder ich batch befehle nutze.
Ich bin nun mal ein blutiger Anfänger der im Urlaub die Zeit und den Spaß gefunden hat sich mit C++ auseinander zu setzen.

Ich bin gerne für konstruktive Kritik offen und freue mich ebenfalls über hilfreiche Tipps die einem Anfänger helfen besser zu werden oder die ganze Materie besser zu verstehen.

Mein Code:
Code:
#include <iostream>
#include <windows.h> 
#include <cstdlib>
#include <math.h> 
#include <time.h>
#include <tchar.h>    




using namespace std;

int main(void)
{


SetConsoleTitle(_T("Zahlen Rate Spiel"));



cout << "\t \t Erraten Sie die richtige Zahl zwischen 1 - 100" << endl << endl;

//cout << "\t \t \t \t \t \t \t \t Versuche: " << i <<endl <<endl;  hier soll später eig die versuchs anzahl angezeigt werden allerdings bekomme ich natürlich ein error wenn er was anzeigen soll dessen wert noch nicht existiert.


    const int low=15;

    srand( time( NULL ) );
    
    int  random = 0 ;
    int  rz = 0 ;
    
    random = rand( ) % 100;
    
    rz = random;
    
   //cout <<  "\n Die Richtige Zahl lautet " << rz << endl << endl; 
    

    nocheinmal:        

 
    int zahl;
    
    cin >> zahl;
    
    
    for ( int i = 10; i >= 0; i-1)
    
    if( zahl !=rz ) {
        
        Beep(500, 50);
        Beep(300, 50);
        cout << "\nDeine Zahl " << zahl << " ist leider Falsch, probiere es noch einmal." << endl << endl;
          
        cout << "Deine versuche " << i <<endl <<endl;  // weil oben i nochmal initialisiert wird mit 10 bleibt es natürlich auf diesem wert wegen dem goto. 
          
        goto nocheinmal;   
            
    } else {
        
        cout << "\nRichtig! Hole dir deinen Gewinn beim Spielemeister ab." << endl << endl;

                
        cout << "Deine Glueckszahl war die " << rz ;
            
         
            
         Sleep(10000);
         
         return(0);
        
    }
    
    
}
    
  //Made by exe.cuT_Ted//

Vielen Dank Im Voraus
exe.cuT_Ted
 
Zuletzt bearbeitet von einem Moderator: (Werbelink gelöscht)
goto = böse. Das macht man nicht
 
ahh ok ich wusste das es wahrscheinlich ziemlich "schlampig" ist sowas zu nutzen allerdings wäre eine erklärung dazu auch schön gewesen. :)
Ergänzung ()

Vielen Dank ich konnte deine hilfe umsetzen und er compiled auch allerdings werden die versuche immernoch nicht richtig angezeigt.
dies ist jetzt der code:

Code:
#include <iostream>
#include <windows.h> 
#include <cstdlib>
#include <math.h> 
#include <time.h>
#include <tchar.h>    




using namespace std;

int main(void)
{


SetConsoleTitle(_T("Zahlen Rate Spiel"));



cout << "\t \t Erraten Sie die richtige Zahl zwischen 1 - 100" << endl << endl;

//cout << "\t \t \t \t \t \t \t \t Versuche: " << i <<endl <<endl;  hier soll später eig die versuchs anzahl angezeigt werden allerdings bekomme ich natürlich ein error wenn er was anzeigen soll dessen wert noch nicht existiert.


    const int low=15;

    srand( time( NULL ) );
    
    int  random = 0 ;
    int  rz = 0 ;
    
    random = rand( ) % 100;
    
    rz = random;
    
   //cout <<  "\n Die Richtige Zahl lautet " << rz << endl << endl; 
    

    int zahl;
    
    for ( int i = 10; i >= 0; i-1)   {
    
    cin >> zahl;
    
    if( zahl !=rz ) {
        
        Beep(500, 50);
        Beep(300, 50);
        cout << "\nDeine Zahl " << zahl << " ist leider Falsch, probiere es noch einmal." << endl << endl;
          
        cout << "Deine versuche " << i <<endl <<endl;
          
           
            
    } else {
        
        cout << "\nRichtig! Hole dir deinen Gewinn beim Spielemeister ab." << endl << endl;

                
        cout << "Deine Glueckszahl war die " << rz ;
            
         
            
         Sleep(10000);
         
         return(0);
        
    }
    
    }
    
}
    
  //Made by exe.cuT_Ted//
 
In Zeile 42 musst du i = i-1 schreiben, sonst wird i nicht richtig heruntergezählt.
 
Wow bin ich doof ...
vielen dank dafür

L# ?

der thread kann also geclosed werden falls es das gibt.

Danke nochmals an alle war mein erster post überhaupt!
 
Falls du doch noch ein Mal reinschaust.

Code:
#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

int main()
{
	SetConsoleTitle(TEXT("Zahlen Rate Spiel"));

	// endl does this "\n" << flush do not use it too often!
	cout << "\t\tErraten Sie die richtige Zahl zwischen 1 - 100\n" << endl;

	// what's this?
	// const int low = 15;

	// FIXME: potential unsigned int overflow in the future
	unsigned int srandSeed = static_cast<unsigned int>(time(NULL));

	srand(srandSeed);

	int  random = 0;

	// 100 % 100 = 0 thus we have to add 1 -> 99 becomes 100 and 0 becomes 1
	random = (rand() % 100) + 1;

	//cout <<  "\n Die Richtige Zahl lautet " << rz << endl << endl; 

	int zahl = 0;

	// the user has 10 tries to guess the number
	for (int i = 9; i >= 0; --i)
	{
		// FIXME: will break if input is not a number
		cin >> zahl;

		if (zahl != random)
		{
			Beep(500, 50);
			Beep(300, 50);

			cout << "\nDeine Zahl " << zahl << " ist leider Falsch, probiere es noch einmal.\n\n";
			cout << "Deine versuche " << i << "\n" << endl;
		}
		else
		{
			cout << "\nRichtig! Hole dir deinen Gewinn beim Spielemeister ab.\n\n";
			cout << "Deine Glueckszahl war die " << random << "\n";
			cout << "Gebrauchte Versuche: " << 10 - i << endl;

			// sleep? why?
			// Sleep(10000);

			// break the loop
			break;
		}
	}

	return (0);
}
 
Hey Danke für dein kommentare!
zu aller erst aber verstehe ich nicht wieso du auf deutsch schreibst und die kommentare auf englisch aber ist auch egal find ich sowieso besser. :)

nun würd ich gern erläutern wieso ich es so gemacht habe oder diese "methoden" benutzt habe.

fangen wir mit << endl ; und \n & \t an, wie gesagt habe ich erst vor kurzem damit angefangen und ich habe 95% meines wissens von dem c++ crash kurs von orange on black und er sagte daß die beiden das selbe bezwecken und es keinen unterschied mache welches man nun nutze.*~*

const int ist ein überbleibsel von einer nicht funktionierenden idee die ich wegen random hatte.

muss gestehen dass die anderen ~5% meines wissens aus foren kommt da ich allein nicht mehr weiter kam und das mit der zeit als randomize faktor kopiert ist. daher verstehe ich den kommentar in zeile 17 nicht.
daher dachte ich die Modulo 100 steht schon für 1-100 und nicht für 0-99

for schleife einfacher fehler meinerseits den ich übersehen habe da ich die schleife umgestellt habe nachdem ich sie eben aus einer meiner anderen anwendungen genommen habe.

meine freundin testet all die kleinen sachen die ich hier im urlaub grad mache und damit sie ein wenig zeit hat mir zu zeigen ob sie gewonnen hat damit sie ihr geld bekommt habe ich sleep eingebaut.

nun zum letzten fehler, dem fehlenden break nach erfüllung der schleife ist wie oben orange on black zu zuschreiben denn er sagte das break kann man auch weg lassen da es sowieso beendet ist/ wird.

zudem habe ich heute gelernt das der namespace std ebenfalls "böse" ist, allerdings für so einfache simple anwendungen wie meinen mehr probleme löst als schafft.

Hast du evtl einen Tipp oder eine empfehlung die sich gut für anfänger eignet um c++ zu lernen?

Ich danke dir vielmals für deine mühe! :)
exe.cuT_Ted
 
Auf Wunsch des TE geschlossen.
Edit: Nach Rückmeldung öffne ich den Thread erstmal wieder.
 
Zuletzt bearbeitet:
Zurück
Oben