Frage bez. Code, Meinungen zum Programm

Hallo!
Ich habe heute nun mein erstes "richtiges" C++-Programm geschrieben.
Nun würde ich von Euch gerne wissen, wie ich das gemacht habe ;) d.h:

-ist der Code gut leserlich?
-Fehler?
-könnte man das Ganze einfacher machen?

Es würde mich freuen wenn ihr ein kurzes Statement abgeben könnten.
Wie gesagt bin ich noch Anfänger, aber da es mir Spass macht werde ich dranbleiben ;)
glg
Michi

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

int vzufall, eingabe = 1, schwierigkeit; //globale Var. def., vzufall = zufallszahl, eingabe = auswahl des users

int raten()
{

                                   
         int ent, zaehler = 1; //für beenden / nochmakl spielen
         while (eingabe != vzufall)
         {     
         cout << "\nGeben Sie Tipp Nummer " << zaehler << " ein:\t"; cin >> eingabe;
         if (eingabe < vzufall)
         {
         cout << "Falsch, Eingabe zu klein!";
         zaehler++;
         }
         if (eingabe > vzufall)
         {
         cout << "Falsch, Eingabe zu gross!";
         zaehler++;
         }
         /*if (zaehler > 10)
         cout << "\nGeben Sie sich Muehe!!!!\n";
         if (zaehler > 15)
         {
         cout << "\n\nSie sind zu schlecht...Es hat keinen Sinn!";
         system ("pause");       
         } */           
         if (eingabe == vzufall)
         {
         cout << "\n\n\a\aGratulation!Sie haben dir richtige Zahl geraten.";
         cout <<"\n Wollen Sie nochmal spielen (1) oder beenden (2)?"; cin >> ent;
         if (ent == 1)
         cout << "in b";
         else
         break;
         }
         } //while schleife beenden
          

}

int zufall()
{
    if (schwierigkeit == 1)
       {
       srand(GetTickCount());
       vzufall =  rand()%101;
       }
    if (schwierigkeit == 2)
       {
       srand(GetTickCount());
       vzufall =  rand()%501;
       }
    if (schwierigkeit == 3)
       {
       srand(GetTickCount());
       vzufall =  rand()%1001;
       }

raten();  
}



int main()
{

schwierigkeit: //goto schwierigkeit, wenn eingabe falsch

cout << "Geben Sie Ihren gewuenschten Schwierigkeitsgrad ein: \n1 = leicht (1-100)\n2 = mittel (1 - 500)\n3 = schwer (1 - 1000)\nEingabe:"; cin >> schwierigkeit;
if (schwierigkeit < 1 || schwierigkeit > 3) // Eingabe überprüfen
   {              
   cout << "Eingabe ungültig!\n";
   goto schwierigkeit; 
   }
    
zufall();
}

ps. in Zeile 71/77 verwende ich einen goto-Befehl, welcher ja veraltet ist. Wie könnte ich es umschreiben ?
 
Original von michio
Hallo!
Ich habe heute nun mein erstes "richtiges" C++-Programm geschrieben.

naja, eigentlich hast du ein c programm geschrieben. das einzige was du in dem programm verwendest was es nur in c++ gibt sind die i/o streams.

ps. in Zeile 71/77 verwende ich einen goto-Befehl, welcher ja veraltet ist. Wie könnte ich es umschreiben ?

du hast das gleiche problem schon mal in der funktion raten() gehabt und dort mit einer while() schleife geloest.

abgesehen vom boesen goto hier noch ein paar punkte:

- globale variablen sollte man so wenige wie moeglich verwenden. deine funktionen haben alle den rueckgabetyp int, geben aber gar keinen int zurueck. du kannst den rueckgabetyp ruhig verwenden, genauso wie argumente die an die funktionen uebergeben werden. was spricht dagegen, dass zufall() ein argument bekommt in dem der schwierigkeitsgrad steht und eine zahl zurueckliefert die eine zufallszahl fuer diesen schwierigkeitsgrad darstellt?

- bei den headern der c++ standardbibliothek kein .h anhaengen. also statt #include <iostream.h> eben #include <iostream> schreiben

- wenn du funktionen aus der standard c bibliothek verwenden willst, dann schreibe #include <cstdlib> anstatt den speziellen header aus der c bibliothek anzugeben (in deinem fall time.h)

- wenn moeglich immer plattformunabhaengig programmieren. nur weil du windows benutzt musst du nicht erzwingen, dass jeder der deine programm verwenden will auch windows benutzen muss. in der win api, auf die du durch das #include <windows.h> zugriff hast gibt es eine funktion GetTickCount() mit der du den zufallszahlengenerator initialisierst. in der standard c bibliothek gibt es aber eine funktion (auch in time.h) namens time(), die den selben zweck erfuellt.

- du musst den zufallszahlengenerator nur ein mal initialisieren. z.b. am anfang der main()

hier mal der geaenderte code, ohne globale variablen, ohne goto, mit verwendung von rueckgabewerten und funktionsparametern und plattformunabhaengig:

Code:
#include <iostream>
#include <cstdlib>

using std::cin;
using std::cout;

void raten(int vzufall)
{
	int eingabe = -1;
       int ent, zaehler = 1; //für beenden / nochmakl spielen
	while (eingabe != vzufall)
	{     
		cout << "\nGeben Sie Tipp Nummer " << zaehler << " ein:\t"; 
              cin >> eingabe;
		if (eingabe < vzufall)
		{
			cout << "Falsch, Eingabe zu klein!";
			zaehler++;
		}
		if (eingabe > vzufall)
		{
			cout << "Falsch, Eingabe zu gross!";
			zaehler++;
		}
		/* if (zaehler > 10)
			cout << "\nGeben Sie sich Muehe!!!!\n";
		if (zaehler > 15)
		{
			  cout << "\n\nSie sind zu schlecht...Es hat keinen Sinn!";
			  system("pause");
		}            */
		if (eingabe == vzufall)
		{
			cout << "\n\n\a\aGratulation!Sie haben dir richtige Zahl geraten.";
			cout <<"\n Wollen Sie nochmal spielen (1) oder beenden (2)?"; 
                     cin >> ent;
			if (ent == 1)
				cout << "in b";
			else
				break;
		}
	} //while schleife beenden
}

int zufall(int schwierigkeit)
{
    if (schwierigkeit == 1)
    {
        return rand()%101;
    }
    if (schwierigkeit == 2)
    {
	 return rand()%501;
    }
    if (schwierigkeit == 3)
    {
	 return rand()%1001;
    }
	return -1;
}

int main()
{
	int schwierigkeit = 0;
	srand(time(NULL));

	do {
		cout << "Geben Sie Ihren gewuenschten Schwierigkeitsgrad ein: \n1 = leicht (1-100)\n2 = mittel (1 - 500)\n3 = schwer (1 - 1000)\nEingabe:"; 
              cin >> schwierigkeit;
		if (schwierigkeit < 1 || schwierigkeit > 3)
			cout << "Eingabe ungültig!\n";
	} while (schwierigkeit < 1 || schwierigkeit > 3); // Eingabe überprüfen              
    
	raten(zufall(schwierigkeit));
	return 0;
}
 
Vielen Dank The Dude!
Ich werde mir deinen Code nun mal anschaun und mich beim nächsten Programm auf deine Tipps achten.

Danke! :)
 
Zurück
Oben