Probleme beim Programmieren von 'Hangman'



  • Hey Jungs, ich sitz gerade da und muss eine Art Hangman in C++ (Borland c++ Builder) Programmieren...is bisher noch schlecht und es fehlen noch Teile, also das mal alles net beanstanden bitte...bin n0000b 🕶

    Also hier mein Problem: Der String 'Ratewort', in dem dass Ratewort gebildet werden soll und mit dem String 'Eingabe' Verglichen werden soll funzt einfach nicht...ich kann ihn weder ausgeben noch damit arbeiten noch sonst etwas...alles was mit ihm zu tun hat geht einfach nicht!!!!! Is er falsch initialisiert oder muss eine eingabe stattfinden oder wie läuft das ab?!!!

    Hier mein Code:

    //----------------------------------------------------------------------------//
    //----------------------|    Autor: Phxxxxx Brxxxx     |----------------------//
    //----------------------|    Datum: 07.04.2006         |----------------------//
    //----------------------|    Klasse: E1IT2             |----------------------//
    //----------------------------------------------------------------------------//
    
    #include <iostream.h>
    #include <conio.h>
    #include <string>
    
    void main()
    {
      int i, j, Ausgabe, ende;
      string Ratewort, Eingabe;
      char Ratezeichen;
      bool nochmal;
    
      cout<< " Spieler 1, Bitte geben sie ihr Wort so ein, dass Spieler 2 es nicht sehen kann: ";
      cin>> Eingabe;
    
      Ausgabe = Eingabe.length();
    
      for (i = 0; i <= Ausgabe; i++)
        Ratewort[i] = '0';
    
      nochmal = 0;
    
      for (j = 0; j <= Eingabe.length(); j++)
      {
        if (Ratewort[j] == '0')
          nochmal = 1;
      }
    
      while (nochmal == 1)
      {
        cout<< "\n\n" << Ratewort;
        cout<< "\nSpieler 2 Eingabe: ";
        cin>> Ratezeichen;
    
        for (i = 0; i <= Eingabe.length(); i++)
        {
    
          if (Eingabe[i] == Ratezeichen)
            Ratewort[i] = Ratezeichen;
    
          else
            ende++;
        }
    
        cout<< "\n\nBisher erraten: "<<Ratewort;
    
        for (j = 0; j <= Eingabe.length(); j++)
        {
    
          if (Ratewort[j] == '0')
            nochmal = 1;
        }
    
        if (ende == 10)
        {
          nochmal = 0;
          cout<< "\n\nSchade, 10 Versuche sind leider vorbei!...Versuchts ein ander mal wieder!";
        }
    
        if (Ratewort == Eingabe)
        {
          cout<< "\n\nGlueckwunsch, sie haben das Wort *** " << Eingabe << " ***erfolgreich erraten!!!" << endl;
        }
    
      }
    
      getch();
    }
    

    Danke schonmal für eure Hilfe!!!!!!!!!!

    greetz da machine



  • ja, du hast Ratewort falsch initialisiert, ich konnts aber nicht lassen, auch noch andere Dinge zu bemeckern: 😉

    // #include <iostream.h> macht man heutzutage nimmer, das ist veraltert,
    //#include <iostream.h>
    // richtig schauts so aus: (frag jetzt nicht wieso, das wirst du spaeter von selbst
    // verstehen)
    #include <iostream>
    using namespace std;
    
    // conio.h brauchst du sowieso nicht
    //#include <conio.h>
    
    #include <string>
    
    // "void main()" ist uncool, richtig muss es lauten
    //void main()
    int main()
    {
    	int i, j, Ausgabe, ende;
    	string Ratewort, Eingabe;
    	char Ratezeichen;
    	bool nochmal;
    
    	cout<< " Spieler 1, Bitte geben sie ihr Wort so ein, dass Spieler 2 es nicht sehen kann: ";
    	cin>> Eingabe;
    
    	Ausgabe = Eingabe.length();
    
    	// du hast Ratewort nicht richtig initialisiert, am leichtesten geht das so:
    	// "string(l, c) erstellt einen String der Laenge l und fuellt ihn mit dem Zeichen c
    	Ratewort = string(Ausgabe, '*');
    //	for (i = 0; i <= Ausgabe; i++)
    //		Ratewort[i] = '*';
    
    	// wozu der Teil ueberhaupt gut ist versteh ich nicht?
    	// funkt doch auch ohne? ?-)
    /*
    	nochmal = 0;
    	for (j = 0; j <= Eingabe.length(); j++)
     	{
    		if (Ratewort[j] == '0')
    			nochmal = 1;
    	}
    */
    
    	// nochmal ist bool, kein int ;-)
    //	nochmal = 1;
    //	while (nochmal == 1)
    
    	nochmal = true;
    	while (nochmal == true)
    	{
    		cout<< "\n\n" << Ratewort;
    		cout<< "\nSpieler 2 Eingabe: ";
    		cin>> Ratezeichen;
    
    		for (i = 0; i <= Eingabe.length(); i++)
    		{
    			if (Eingabe[i] == Ratezeichen)
    			{
            			Ratewort[i] = Ratezeichen;
    				cout << "eeeeeeeeeeeeh!";
    			}
    		      else
    			ende++;
    		}
    
    		cout<< "\n\nBisher erraten: "<<Ratewort;
    
    		for (j = 0; j <= Eingabe.length(); j++)
    		{
    
    			if (Ratewort[j] == '0')
    			{
    				// nochmal ist bool ;-)
    //				nochmal = 1;
    				nochmal = true;
    			}
    		}
    
    		if (ende == 10)
    		{
    			// nochmal ist bool
    //			nochmal = 0;
    			nochmal = false;
    			cout<< "\n\nSchade, 10 Versuche sind leider vorbei!...Versuchts ein ander mal wieder!";
    		}
    
    		if (Ratewort == Eingabe)
    		{
    			cout<< "\n\nGlueckwunsch, sie haben das Wort *** " << Eingabe << " ***erfolgreich erraten!!!" << endl;
    
    			// jetzt musst du das Spiel auch beenden!
    			nochmal = false;
    		}
    
    	}
    
    	// warum getch() aus der conio.h, wenns ein cin.get() aus'm <iostream> auch tut ;-)
    //	getch();
    	cin.get();
    
      	// weil wir "int main()" geschrieben haben, brauchen wir die folgende Zeile
      	return 0;
    }
    


  • // weil wir "int main()" geschrieben haben, brauchen wir die folgende Zeile

    nein



  • danke, jetzt hab ich s so uns es geht 🙂

    //----------------------------------------------------------------------------//
    //----------------------|    Autor: xxxxxxx xxxxxx     |----------------------//
    //----------------------|    Datum: 02.12.2005         |----------------------//
    //----------------------|    Klasse: E1IT2             |----------------------//
    //----------------------------------------------------------------------------//
    
    #include <iostream.h>
    #include <string>
    
    int main()
    {
      unsigned int i, j, Ausgabe, ende = 0;
      string Ratewort, Eingabe;
      char Ratezeichen;
      bool nochmal = 0, richtig;
    
      cout<< " Spieler 1, Bitte geben sie ihr Wort mit 5 Buchstaben so ein, dass Spieler 2 es nicht sehen kann: ";
      cin>> Eingabe;
    
      system( "cls" );
    
      cout<< "\n\n LOS GEHTS!!!" << endl << endl;
    
      Ratewort = string(Eingabe.length(), '*');
    
      nochmal = true;
    
      while (nochmal == true)
      {
        cout<< "\n\n" << Ratewort;
        cout<< "\nSpieler 2 Eingabe: ";
        cin>> Ratezeichen;
    
        for (i = 0; i <= Eingabe.length(); i++)
        {
    
          if (Eingabe[i] == Ratezeichen)
            Ratewort[i] = Ratezeichen;
    
          else
            ende++;
        }
    
        cout<< "\n\nBisher erraten: "<<Ratewort;
    
        for (j = 0; j <= Eingabe.length(); j++)
        {
    
          if (Ratewort[j] == '0')
            nochmal = true;
        }
    
        if (ende >= 100)
        {
          nochmal = true;
          richtig = false;
        }
    
          if (Ratewort == Eingabe)
          {
            nochmal = false;
            richtig = true;
          }
    
      }
    
    if (richtig == true)
      cout<< "\n\nGlueckwunsch, sie haben das Wort *** " << Eingabe << " ***erfolgreich erraten!!!" << endl;
    else
      cout<< "\n\nSchade, 10 Versuche sind leider vorbei!...Versuchts ein ander mal wieder!";
    
      cin.get();
    }
    

    aber mal ne frage, was soll eigentlich das

    using namespace std;
    

    ?????

    geht doch auch ohne!!!

    Warum Bools nicht gleich 0 oder 1 setzen? is doch s gleiche wie true und false!



  • da_machine schrieb:

    aber mal ne frage, was soll eigentlich das

    using namespace std;
    

    ?????

    geht doch auch ohne!!!

    das "using namespace std" brauchst du, wenn du statt
    [cpp]
    #include <iostream**.h**>
    [/cpp]

    #include <iostream>
    

    schreibst. <iostream.h> (<<< hat ein ".h" hintendran!) ist veraltert und sollte nimmer verwendet werden. Gleiches gilt fuer andere Dateien der Standardbibliothek (<vector.h>, <list.h>... die wurden auch ersetzt durch <vector>, <list>...).
    Wenn du jetzt aber die neuen Dateien verwendest (die ohne ".h" hintendran), dann brauchst du das using namespace. Ganz einfach weil alle Elemente dieser Dateien im Namespace "std" drin sind (solltest du noch nicht wissen was ein Namespace ist, dann wirst du's sicher noch lernen 🙂 ).

    Warum Bools nicht gleich 0 oder 1 setzen? is doch s gleiche wie true und false!

    Schon, aber es ist weniger verwirrend, weil ich auf den ersten Blick gleich weiss dass es eine boolsche Variable ist. Na ja, ok, vielleicht ists auch 'ne Geschmackssache 😃



  • Supi, das war ne einwandfreie erklärung 😉

    kann mir grob vorstellen was ein namespace wohl sein wird...aber wenn zeit hast kannst s ja noch erklären 🙂

    thx & greetz



  • da_machine schrieb:

    kann mir grob vorstellen was ein namespace wohl sein wird...aber wenn zeit hast kannst s ja noch erklären 🙂

    Nur Mut, du findest es schon selber heraus. Wage den Schritt, beglücke Google und stell konkrete Fragen wenn nach so einer Lektüre http://de.wikipedia.org/wiki/Namespace noch welche vorhanden sind.


Anmelden zum Antworten