PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein bisschen C++



Zaphod-B
28-04-2002, 12:34
Moin,
ich bin, was programmieren angeht, noch totaler Anfänger. Ich hab da ein bischen mit C++ rumgespielt, und bin auf das bisher erreichte schon ein bischen Stolz ;). Allerdings hab ich ein Problem mit den Programm, dass ich bis jetzt nicht einkreisen konnte.
Wenn man das Programm aus führt, so läuft alles normal ab, bis auf eine Stelle. Beider Eingabe
Wollen wir weiter Zocken(Irgendeine Taste oder n)
funktioniert alles wie gewünscht, bis auf das, wenn ich eine Cursor Taste benutze, rennt das Programm in einer Endlosschleife los.
Vielleicht hat jemand einen Vorschlag, wie man das Problem beseitigen kann.
Hilfe wäre nett.

Und bitte nicht zuviel meckern, ich hab wirklich keine Ahnung.


Greetings Zaphod-B



#include <iostream.h>
#include <curses.h>
#include <stdlib.h>
#include <time.h>
// Hauptprogramm
int main ()
{
char j('j') ,n ('n');
do
{
unsigned int comp, spie;
int g[4][4]={{0,-1,1,-1},{1,0,-1,-1},{-1,1,0,1},{1,1,-1,0}};
{

cout << "Such dir was aus\n";
cout << "1 ... Schere\n";
cout << "2 ... Stein\n";
cout << "3 ... Papier\n";
cout << "4 ... Brunnen\n";
cout << "Menüauswahl : ";
cin >> spie;
}
// Gibt den Zufallsgenerator die genaue Zeit und Datum.
{
srand((unsigned int)time(NULL));
rand()%4;
comp=1+(int) (4.0*rand()/(RAND_MAX+1.0));
}

{
if (spie>4) cout <<"Das war wohl nix\n",exit(0);
cout << "Deine Wahl:\n";

switch (spie) {
case 1:cout <<"Schere\n";break;
case 2:cout <<"Stein\n";break;
case 3:cout <<"Papier\n";break;
case 4:cout <<"Brunnen\n";break;}

cout << "Wahl des Computers:\n";

switch (comp) {
case 1:cout <<"Schere\n";break;
case 2:cout <<"Stein\n";break;
case 3:cout <<"Papier\n";break;
case 4:cout <<"Brunnen\n";break;}

}
if (g[spie-1][comp-1]==0) cout<<"Unentschieden\n";
if (g[spie-1][comp-1]>0) cout<<"GEWONNEN!!!Schwein gehabt!!! HEHE!!!\n";
if (g[spie-1][comp-1]<0) cout<<"MUHA!!!-=<LOOSER>=- BÄH!!! :-P\n";


cout << "Wollen wir weiter Zocken(Irgendeine Taste oder n)?";
cin >> n;
cout << "Okay\n\n";
}
while (n != 'n') ;
{
cout << "bye\n";
}
}

tg-elias
28-04-2002, 17:59
Hy Hy,

wie willst du wieder aus der while-Schleife ausbrechen ?

sobald sich dein Programm in der while-Schleife befindet, gibt es keine Möglichkeit mehr, die Bedingung auf true zu setzen.

Mein Vorschlag:

Setze doch die Abfrage, ob mal weiterzocken will, in die Schleife mit rein,
dann hast du jederzeit die Möglichkeit, die Schleifenbedingung zu ändern.

Noch nen schönen Sonntag,

Gruss tg-elias

PS: Für einen Programmiereinsteiger gar nicht schlecht. Respekt !

Zaphod-B
28-04-2002, 18:43
Moin,
danke für die Antwort.
Ich bin der Meinung, dass ich die Abfrage eigntlich in die while Schleife mit reingepackt habe. Ich glaube eigentlich, dass mit der Anweisung
while (n != 'n') ; dafür gesorgt sein sollte, dass alle Tastatur Eingaben, ausser 'n', zur Weiterführung der Schleife führen.
Nur wenn ich die Cursor Tasten benutze hängt sich das Programm in einer Schleife auf.
Ich hab auch schon mal überlegt, ob ich das mit einer Readline Anweisung beheben könnte, dann wären ja die Cursor Tasten mit Funktion belegt, ich halte das aber für keine saubere Lösung.


Greetings Zaphod-B


P.S.: Das meiste hab ich mir aus dem Internet rausgelesen, aber dann und wann hab ich irre Probleme im Inet was zu finden, so wie jetzt. ;)

anda_skoa
28-04-2002, 20:18
Original geschrieben von tg-elias

wie willst du wieder aus der while-Schleife ausbrechen ?

sobald sich dein Programm in der while-Schleife befindet, gibt es keine Möglichkeit mehr, die Bedingung auf true zu setzen.


Das passt schon, aber Zaphod benutzt soviele (IMHO unnötige) Blockklammern, das es nicht so übersichtlich ist, welche Klammer wohin gehört.

Das while gehört zu einem do ziemlich weit oben.

Das Problem könnte sein, dass ein Cursordruck vielleicht mehr als einen char in den stream gibt, dann wäre nach dem Lesen nochw as drinnen, was beim nächsten cin vorne dranhängt.

Vielleicht geht es, wenn n als string deklariert ist.

Ciao,
_

degaw
29-04-2002, 22:44
hi, Zaphod-B

Du musst Deine Ausgabe vor einer Eingabe flushen,
im übrigen verstehe ich deine Blöcke nicht, warum setzt Du
soviele unnütze Klammern?

anbei Dein Code, ohne überflüssige Klammern:
#include <iostream.h>
#include <curses.h>
#include <stdlib.h>
#include <time.h>
// Hauptprogramm
int main() {
char j('j') ,n ('n');
char zeichen;
do {
unsigned int comp, spie, zeichen;
int g[4][4]={{0,-1,1,-1},{1,0,-1,-1},{-1,1,0,1},{1,1,-1,0}};
cout << "Such dir was aus\n";
cout << "1 ... Schere\n";
cout << "2 ... Stein\n";
cout << "3 ... Papier\n";
cout << "4 ... Brunnen\n";
cout << "Menüauswahl : ";
cin >> spie;

// Gibt den Zufallsgenerator die genaue Zeit und Datum.

srand((unsigned int)time(NULL));
rand()%4;
comp=1+(int) (4.0*rand()/(RAND_MAX+1.0));

if (spie>4) cout <<"Das war wohl nix\n",exit(0);
cout << "Deine Wahl:\n";
switch (spie) {
case 1:cout <<"Schere\n";break;
case 2:cout <<"Stein\n";break;
case 3:cout <<"Papier\n";break;
case 4:cout <<"Brunnen\n";break;
}

cout << "Wahl des Computers:\n";

switch (comp) {
case 1:cout <<"Schere\n";break;
case 2:cout <<"Stein\n";break;
case 3:cout <<"Papier\n";break;
case 4:cout <<"Brunnen\n";break;
}


if (g[spie-1][comp-1]==0) cout<<"Unentschieden\n";
if (g[spie-1][comp-1]>0) cout<<"GEWONNEN!!!Schwein gehabt!!! HEHE!!!\n";
if (g[spie-1][comp-1]<0) cout<<"MUHA!!!-=<LOOSER>=- BÄH!!! :-P\n";

cout <<"Wollen wir weiter Zocken(Irgendeine Taste odier n) ?"<<flush;
cin >> zeichen;
cout <<"Okay\n\n";
} while (n!= 'n');
cout <<"Bye\n";
}



mfG
degaw