Programm funktioniert nicht

Diskutiere Programm funktioniert nicht im Developer Network Forum im Bereich Hardware & Software Forum; Hallo, kann mir villeicht jemand helfen? Ich habe zur Übung ein kleines Programm geschrieben, aber dies funktioniert nicht und ich finde einfach...
  • Programm funktioniert nicht Beitrag #1
Funnelweb

Funnelweb

Bekanntes Mitglied
Dabei seit
21.02.2007
Beiträge
469
Reaktionspunkte
0
Hallo,

kann mir villeicht jemand helfen? Ich habe zur Übung ein kleines Programm geschrieben, aber dies funktioniert nicht und ich finde einfach nicht den Fehler. Ich vermute ihn in der Funktion Game.


Code:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<windows.h>
#pragma comments (lib, winmm.lib)
using namespace std;
int highscores[128];
int level;
int schwierig =10;
char menu();
int schwer();
bool game();
int highscoresfunc();
char hilfe();
int main()
{
 int highscoreanzahl=0;
 
 char wahl;
 int level;
 int spielnr=0;
 cout <<"Ratespiel \n\n";
 for (;wahl != 'e';spielnr++)
 {
  level =(spielnr+1)+5;
  cout <<endl<<endl;
  wahl = menu();
  if (wahl == 'p');
  bool nochmal=game();
  if (wahl =='o')
   schwierig= schwer();
  if (wahl =='h')
   wahl =hilfe();
  if (wahl =='s')
  int zi =highscoresfunc();
  if (nochmal==false)
  {
  highscoreanzahl++,
  highscores[highscoreanzahl]= level+spielnr+schwierig;
  }
 }
return 0;
}
 
char menu()
{
 char subwahl;
 cout <<"p\t\tNeu Starten\no\t\tOptionen\nh\t\tHilfe\ns\t\tHighscores\ne\t\tEnde\n\n"<<endl;
 cin >>subwahl;
 return subwahl;
}
int schwer()
{
 for (;;)
 {
  char schwerwahl;
  cout <<"Schwierigkeitsstufe: \n\t\tLeicht\n\t\tMittel\n\t\tSchwer";
  cin >>schwerwahl;
  if (schwerwahl=='l'||schwerwahl=='L')
   return 15;
  else if (schwerwahl == 'm'||schwerwahl=='M')
   return 10;
  else if (schwerwahl =='s'||schwerwahl =='S')
   return 5;
  else 
   cout <<"\a\nFalsche eingabe!";
 }
}
char hilfe()
{
 cout <<"\nIm Ratespiel geht es darum die richtige \nZahl zu erraten. Je nach Schwierigkeitsgrad ist die Anzahl der Versuche beschraenkt.\nGehen sie im Menue auf \"o\" fuer Optionen und bestimmen sie den Schwierigkeitsgrad.";
 cout <<"Geben sie anschließend \"p\" ein um das Spiel zu starten.\n\n \t\t\n\n";
 return 'm';
}
int highscoresfunc()
{
 int* phighscores[128];
 int* plevel;
 plevel =&level;
 phighscores[128]= &highscores[128];
 for (int zaehlen=-1;zaehlen<=*plevel;zaehlen++)
 {
  cout<<phighscores[zaehlen]<<endl;
 }
 return 0;
}
 
bool game()
{
 srand (timeGetTime());
 int* plevel;
 plevel =&level;
 int zufall;
 zufall = (rand() %*plevel)+1;
 int* pschwierig;
 pschwierig=&schwierig;
 cout <<endl<<endl;
 cout <<"Das spiel beginnt!\n";
 for (int geraten; geraten!=zufall&& pschwierig>=0 ;pschwierig--)
 {
 
  cin >>geraten;
  if (geraten ==zufall)
   cout <<"Herzlichen Glückwunsch!";
  if (geraten!= zufall)
   cout <<"Schade, leider die falsche";
 }
 if (pschwierig<0)
 return false;
 else 
  return true;
}

villeicht kann mir jemand helfen, danke im Vorraus


Mfg

Funnelweb
 
  • Programm funktioniert nicht Beitrag #2
Ultimate Construct

Ultimate Construct

Bekanntes Mitglied
Dabei seit
19.06.2006
Beiträge
4.137
Reaktionspunkte
0
Hallo,

hab mir den Code jetzt nicht genauer angeschaut aber dein "Style" ( wenn man ihn so nennen darf ) ist grausam , man sieht ja garnicht mehr was zu was gehört ...

MFG, The U.C.
 
  • Programm funktioniert nicht Beitrag #3
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

Hallo,

kann mir villeicht jemand helfen? Ich habe zur Übung ein kleines Programm geschrieben, aber dies funktioniert nicht und ich finde einfach nicht den Fehler. Ich vermute ihn in der Funktion Game.

Wie sieht denn der Fehler aus?

Nic
 
  • Programm funktioniert nicht Beitrag #4
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Schneid uns doch den entscheiden Codeteil raus, zur besseren Übersicht.
 
  • Programm funktioniert nicht Beitrag #5
Funnelweb

Funnelweb

Bekanntes Mitglied
Dabei seit
21.02.2007
Beiträge
469
Reaktionspunkte
0
Hallo,

hab mir den Code jetzt nicht genauer angeschaut aber dein "Style" ( wenn man ihn so nennen darf ) ist grausam , man sieht ja garnicht mehr was zu was gehört ...

MFG, The U.C.

ich wollte einfach nur die Benutzung der Funktionen Üben. Ich weiss selbst,dass dies nicht sehr Übersichtlich ist...

Wie sieht denn der Fehler aus?

Nic


ich glaub es hat etwas mit der zufallszahl zu tun

Code:
bool game()
{
[B] srand (timeGetTime());
 int* plevel;
 plevel =&level;
 int zufall;
 zufall = (rand() %*plevel)+1;[/B]
 int* pschwierig;
 pschwierig=&schwierig;
 cout <<endl<<endl;
 cout <<"Das spiel beginnt!\n";
 for (int geraten; geraten!=zufall&& pschwierig>=0 ;pschwierig--)
 {
 
  cin >>geraten;
  if (geraten ==zufall)
   cout <<"Herzlichen Glückwunsch!";
  if (geraten!= zufall)
   cout <<"Schade, leider die falsche";
 }
 if (pschwierig<0)
 return false;
 else 
  return true;
}

ich denke, dass hier der Fehler liegt. Warscheinlich im fetten bereich.
 
  • Programm funktioniert nicht Beitrag #7
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
ich wollte einfach nur die Benutzung der Funktionen Üben. Ich weiss selbst,dass dies nicht sehr Übersichtlich ist...

Zur Übersichtlichkeit: Google mal nach "UniversalIndentGUI"

Hab den Code nur kurz überflogen und ich frage mich, was Du da eigentlich mit den ganzen Pointer vorhast?
Was soll denn diese Zeile hier bewirken?

for (int geraten; geraten!=zufall&& pschwierig>=0 ;pschwierig--)
 
  • Programm funktioniert nicht Beitrag #8
Ultimate Construct

Ultimate Construct

Bekanntes Mitglied
Dabei seit
19.06.2006
Beiträge
4.137
Reaktionspunkte
0
  • Programm funktioniert nicht Beitrag #10
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

* ist ein pointer bzw. zeigt auf einen , der & operator liest diese aus .
Das ist leider falsch.

Der "&" Operator liefert die Adresse eines Objektes zurück-
Der "*" Operator ist der "Inhaltsoperator" und greift auf das Objekt zu, auf das ein Zeiger verweist.

Beispiel:
Code:
[FONT=Courier New]int i=10;  /* weist der Variablen "i" den Wert "10" zu */
int *ip;   /* Definiert einen Zeiger "ip" */

ip=&i;     /* der Zeiger "ip" zeigt nun auf die Variable "i" */
*ip=20;    /* schreibt an die Stelle auf die "ip" zeigt den Wert 20 */
++*ip:     /* erhöht "i" um "1"
(*ip)++    /* dito */
[/FONT]

Nic
 
  • Programm funktioniert nicht Beitrag #11
Ultimate Construct

Ultimate Construct

Bekanntes Mitglied
Dabei seit
19.06.2006
Beiträge
4.137
Reaktionspunkte
0
Aber etwas richtig war doch an meiner These oder :S
 
  • Programm funktioniert nicht Beitrag #12
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
  • Programm funktioniert nicht Beitrag #13
Lambo-Benni

Lambo-Benni

Bekanntes Mitglied
Dabei seit
23.03.2007
Beiträge
7.601
Reaktionspunkte
3
Ort
Medizinmanndiscount
Hallo,


Das ist leider falsch.

Der "&" Operator liefert die Adresse eines Objektes zurück-
Der "*" Operator ist der "Inhaltsoperator" und greift auf das Objekt zu, auf das ein Zeiger verweist.

Beispiel:
Code:
[FONT=Courier New]int i=10;  /* weist der Variablen "i" den Wert "10" zu */
int *ip;   /* Definiert einen Zeiger "ip" */

ip=&i;     /* der Zeiger "ip" zeigt nun auf die Variable "i" */
*ip=20;    /* schreibt an die Stelle auf die "ip" zeigt den Wert 20 */
++*ip:     /* erhöht "i" um "1"
(*ip)++    /* dito */
[/FONT]

Nic
ok, dankew, aber jetzt bin ich genauso ratlos wie vorher...

im Code steht ja nicht

Code:
int *plevel;

sondern

Code:
int* plevel;
:confused: :confused: :confused:
 
  • Programm funktioniert nicht Beitrag #14
Ultimate Construct

Ultimate Construct

Bekanntes Mitglied
Dabei seit
19.06.2006
Beiträge
4.137
Reaktionspunkte
0
Das ist egal ob der * Operator links oder rechts steht , jeder kann es schreiben wie er will .

... :S
 
  • Programm funktioniert nicht Beitrag #15
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

im Code steht ja nicht

Code:
int *plevel;
sondern

Code:
int* plevel;
:confused: :confused: :confused:

Das macht keinen Unterschied. Die Bedeutung ist die gleiche.

Ultimate Construct schrieb:
Aber etwas richtig war doch an meiner These oder :S
Es geht hier nicht um Thesen sondern um Programmierung! Sinnloses Rumraten und falsche Tips helfen dem Frager nicht weiter. Wenn man die Sprache und die Regeln nicht kennt, sollte man sich daher besser einer Antwort enthalten als falsche Tips zu geben!

Das ist egal ob der * Operator links oder rechts steht , jeder kann es schreiben wie er will.

Links oder rechts von was?

Nic
 
  • Programm funktioniert nicht Beitrag #16
Funnelweb

Funnelweb

Bekanntes Mitglied
Dabei seit
21.02.2007
Beiträge
469
Reaktionspunkte
0
Zur Übersichtlichkeit: Google mal nach "UniversalIndentGUI"

Hab den Code nur kurz überflogen und ich frage mich, was Du da eigentlich mit den ganzen Pointer vorhast?
Was soll denn diese Zeile hier bewirken?

for (int geraten; geraten!=zufall&& pschwierig>=0 ;pschwierig--)

ich brauche die Werte. Ich las die Werte könnten nur mit Pointern übernommen werden.
 
  • Programm funktioniert nicht Beitrag #17
Ultimate Construct

Ultimate Construct

Bekanntes Mitglied
Dabei seit
19.06.2006
Beiträge
4.137
Reaktionspunkte
0
@nic : Es ist egal ob man

Code:
int* bla
oder
Code:
int *bla

schreibt . Oder etwa nicht ? Falls nein -dann kann ich dir gerne paar Seiten geben wo das so drinsteht . Von wegen rumraten ...
 
  • Programm funktioniert nicht Beitrag #18
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

ich brauche die Werte. Ich las die Werte könnten nur mit Pointern übernommen werden.
Das hängt von den Datentypen ab. Beispielsweise kannst Du Integers oder auch Fliesskommazahlen ohne Pointer übergeben. In Deinem Beispiel sind daher die Pointer nicht notwendig.

Nic
 
  • Programm funktioniert nicht Beitrag #19
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
ich brauche die Werte. Ich las die Werte könnten nur mit Pointern übernommen werden.
Du verwendest ja schon globale Variablen. Pointer zu benutzen, ohne deren Funktion zu verstehen, ist keine gute Idee.
Ich empfehle Dir, den Code nochmal ohne Pointer zu schreiben. Die sind nicht notwendig und machen den Code nur unübersichtlich und fehleranfällig.

ich glaub es hat etwas mit der zufallszahl zu tun
Code:
[B] int* plevel;
 plevel =&level;
 int zufall;
 [/B][B]zufall = (rand() %*plevel)+1;[/B]
Einer der Fehler hat auch wirklich was mit der Zufallszahl zu tun. Die Variable "level" ist nämlich 0. Und da % eine Division darstellt, geht diese schief.

Btw.: Du solltest auch immer alle Warnungen des Compilers beachten. Der gibt oft sehr hilfreiche Tips ;-)
 
  • Programm funktioniert nicht Beitrag #20
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

Einer der Fehler hat auch wirklich was mit der Zufallszahl zu tun. Die Variable "level" ist nämlich 0.
Nicht notwendigerweise. Level wird lediglich nicht initialisiert und kann daher einen beliebigen Wert tragen, der nicht "0" sein muss.

Die Variable level wird übrigens nochmals im Scope der Funktion main() verwendet. Beim Aufruf von "game()" wird jedoch der Globale-Scope verwendet. Damit hat die Zuweisung "level=(spielnr+1)+5" nur innerhalb von main() Bedeutung!

Nic
 
Thema:

Programm funktioniert nicht

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben