Eine Frage oder mehrere fragen :)

sanjin

Grünschnabel
Hallo ich hätte eine frage
Ich habe eine aufgabe ein hangman spiel zu programieren mit funktionen. Also es lautet so:
Schreiben Sie ein Programm, das es zwei Personen ermöglicht, das Spiel 'Hangman' zu spielen. Die erste Person gibt ein geheimes Wort mit höchstens 79 Zeichen ein, das vom Computer gespeichert wird.
Dann erhält die zweite Person die Gelegenheit, einen Buchstaben zu wählen. Das Programm zeigt die korrekt getroffenen Buchstaben an und lässt dem Spieler zwei Versuche, das Wort zu erraten. Danach kann wieder ein Buchstabe gewählt werden usw.


Also habe ich es versucht zu programieren aber es gibt ein par probleme.
Ich habe es so geschrieben:

#include<iostream>
using namespace std;

#include<iostream>
using namespace std;

int HM(char* wort) {
char vers1;
char vers2;
char versuch;
char N;

do{
cout << "Bitte waehlen sie einen buchstaben: ";
cin >> versuch;

do {

if (versuch== *wort)
cout << versuch;
else
cout << "-";
wort = wort+1;

} while(*wort!='\0');

cout << endl;
cout << "Erster versuch: ";
cin >> vers1;
if (vers1==*wort){
cout << " korekt" ;
return 0;
}
else
cout << "falsch" << endl;

cout << "Zweiter versuch versuch: ";
cin >> vers2;
if (vers2==*wort){
cout << " korekt" << endl;
return 0;
}
else
cout << " falsch" << endl;

cout << endl << "weiter: ";
cin >> N;
} while (N=='j' || N=='J');
return 0;
}


int main ()
{
int zahl;
char Wort[80];
cout << "Bitte geben sie ein geheimes Wort ein: ";
cin >> Wort;
system("clear");
HM(Wort);
return 0;
}

ich habe auch eine version gemacht das die funktion HM mit Wort[] aufruft und oben auch alles geändert aber bei beiden hätte ich fragen also die erste
1. der user gibt zum beispsiel haus ein und ich rate jetzt zum beispiel den buchstaben s dan wir - - - s ausgegeben und dan habe ich 2 versuche um das richtige wort zu tippen wenn ich es nicht schaffe dan kann ich nochmal einen auf einen buchstaben tippen und ich tippe jetzt h und dan kommt nur das raus - - - - - - - - usw viele von diesen strichen also wie kann ich - - - s speichern damit es beim nächsten mal aufrufen
2. frage ist wie kann ich wie kann ich vers1 und vers2 mit wort vergleichen


Huh viel geschrieben aber würde mich freuen wenn jemand hilft :)
 
Musst du wirklich mit char-Arrays arbeiten? Darfst du nicht std::string hernehmen? Das würde wahrscheinlich einiges vereinfachen.
Du kannst globale Variablen erstellen, indem du sie außerhalb eines Methodenkontextes deklarierst, z. B. direkt nach "#include <iostream>". Alternativ ginge es auch, wenn du in einer Methode vor eine lokale Variable "static" schreibst, dann weiß sie beim nächsten Methodenaufruf ihren Wert vom letzten Mal noch.
Das "using namespace std;" würde ich an deiner Stelle weglassen, das kann zu Verwirrungen führen.
Viel schlimmer ist allerdings "system("clear");". Das solltest du auf keinen Fall benutzen, lieber "std::cin.ignore();". Ich wollts grad unter Windows ausprobieren, und kriege "Der Befehl "clear" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

Damit dir jemand hilft, wäre es gut, wenn du deinen Code in eine [ cpp ] -Codebox packst. Außerdem achte mal auf deine Groß- und Kleinschreibung!
 
Das "using namespace std;" würde ich an deiner Stelle weglassen, das kann zu Verwirrungen führen.
Warum? In C++ Dateien und bei kleineren Projekten ist es völlig OK.
Viel schlimmer ist allerdings "system("clear");". Das solltest du auf keinen Fall benutzen, lieber "std::cin.ignore();".
std::cin.ignore() hat aber eine ganz andere Wirkung als der Befehl "clear" (Linux). Der Befehl löscht den Inhalt des Terminals. Es gibt keinen einfachen Weg das plattformübergreifend zu erreichen, da ist ein Aufruf von "clear" bzw. "cls" unter Windows schon OK.

Gruß
 
Hi.
C++:
#include<iostream>
using namespace std;

int HM(char* wort) {
        char vers1;
        char vers2;
        char versuch;
        char N;

        do{
                cout << "Bitte waehlen sie einen buchstaben: ";
                cin >> versuch;

        do {

                if (versuch== *wort)
                        cout << versuch;
                else
                        cout << "-";
                wort = wort+1;

        } while(*wort!='\0');

                cout << endl;
            cout << "Erster versuch: ";
                cin >> vers1;
                if (vers1==*wort){
                        cout << " korekt" ;
                        return 0;
                }
                else
                        cout << "falsch" << endl;

                cout << "Zweiter versuch versuch: ";
                cin >> vers2;
                if (vers2==*wort){
                        cout << " korekt" << endl;
                        return 0;
                }
                else
                        cout << " falsch" << endl;

        cout << endl << "weiter: ";
        cin >> N;
        } while (N=='j' || N=='J');
        return 0;
}


int main ()
{
        int zahl;
        char Wort[80];
        cout << "Bitte geben sie ein geheimes Wort ein: ";
        cin >> Wort;
        system("clear");
        HM(Wort);
        return 0;
}

ich habe auch eine version gemacht das die funktion HM mit Wort[] aufruft und oben auch alles geändert aber bei beiden hätte ich fragen also die erste
1. der user gibt zum beispsiel haus ein und ich rate jetzt zum beispiel den buchstaben s dan wir - - - s ausgegeben und dan habe ich 2 versuche um das richtige wort zu tippen wenn ich es nicht schaffe dan kann ich nochmal einen auf einen buchstaben tippen und ich tippe jetzt h und dan kommt nur das raus - - - - - - - - usw viele von diesen strichen also wie kann ich - - - s speichern damit es beim nächsten mal aufrufen
Ich würde ein zweites char Array anlegen und dies zu Beginn komplett mit genauso vielen - füllen wie Buchstaben im wort sind.

Dann in der Schleife mußt du an der jeweiligen Position im zweiten Array, wenn der eingegebene Buchstabe mit dem Buchstaben an der Position im wort Array übereinstimmt den Buchstaben übernehmen.
2. frage ist wie kann ich wie kann ich vers1 und vers2 mit wort vergleichen
Die Variablen vers1 und vers2 würde ich ganz weglassen. C-Strings kann man mit der strcmp Funktion vergleichen.

Gruß
 
die erste antwort hab ich verstanden, aber die zweite nicht so wir haben das noch nicht gehabt in der vorlesung wie funktioniert das ?
danke für die antwort und engelmarkus auch :)
Als du dich hier angemeldet hast, hast du auch die Netiquette akzeptiert. Engelmarkus hat dich bereits darauf hingewiesen: halte dich an Punkt 15 der Netiquette (Groß-/Kleinschreibung)!

Zur Aufgabe: du solltest einmal ein einzelnes Zeichen einlesen und entsprechend das geheime Wort anzeigen. Dann mußt du 2 mal ein ganzes Wort (also einen String!) einlesen. Dazu brauchst du aber nicht 2 Variablen:
C++:
char buchstabe;
char versuch[80];

cout << "Bitte waehlen sie einen buchstaben: ";
cin >> buchstabe;
cin.ignore(80, '\n'); // restliche Zeile ignorieren.

// ... Wort ausgeben

cout << "Erster versuch: ";
cin >> versuch;

if (strcmp(versuch, word) == 0) {
  // richtig geraten!
  ...
}
...
Gruß
 
Zurück