PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nimm Spiel



BigOne
27-11-2002, 19:11
Hallo!

Ich hab versucht, die Übungsaufgabe zu Teil 15 von Volkards C++-Kurs zu lösen(www.volkard.de).
Leider Kompiliert g++(GNU) das Programm nicht. Er meint:

implicit declaration of function int gewonnen(...)

Vielleicht könnt ihr mir weiterhelfen. Der Code:


#include <iostream.h>

int anzahlAusgeben(int anzahl)
{
cout << "Es liegen " << anzahl << " Muenzen auf dem Tisch." << endl;
return 0;
};

int gewonnen(int wer)
{
if(wer == 1)
cout << "Du hast gewonnen! Gratuliere." << endl;
else
cout << "Ich habe gewonnen, du Pfeife." << endl;
return 0;
};

int zugRechner(int anzahl)
{
if(anzahl % 4 == 0)
return anzahl - 1;
else
return anzahl - (anzahl % 4);
};

int zugMensch(int anzahl)
{
int muenzen = 0;
do
{
cout << "Wie viele Münzen willst du nehmen? " << flush;
cin >> muenzen; }while((muenzen > 3) && (muenzen > anzahl) &&
(muenzen < 1));};

void main()
{
int anzahlMuenzen = 0;
const int RECHNER = 0;
const int MENSCH = 1;
cout << "Anzahl der Muenzen: ";
cin >> anzahlMuenzen;
anzahlAusgeben(anzahlMuenzen);
while(anzahlMuenzen > 0)
{
if((anzahlMuenzen = zugRechner(anzahlMuenzen)) > 0)
{
anzahlAusgeben(anzahlMuenzen);
}
else
{
gewonnnen(RECHNER);
break;
}
if((anzahlMuenzen = zugMensch(anzahlMuenzen)) > 0)
{
anzahlAusgeben(anzahlMuenzen);
}
else
{
gewonnnen(MENSCH);
break;
}
}

};

micha
27-11-2002, 19:28
Hi,

- Der Anweisungsblock einer Funktion hört mit einer geschlossenen geschweiften Klammer auf, nicht mit einem Semikolon ( Semikolon nur bei Klassen, Strukturen, Enums )

- in main () sind 2 Tippfehler, beidesmal gewonnen mit 3 statt 2 n.

- der Rückgabewert von main () sollte vom Typ int sein, nicht void.

Und wenn Du zum Schluss noch



#include <iostream.h>


durch



#include <iostream>
using namespace std;


ersetzt, dann hast Du ne lästige Compiler-Warnung weniger ;)

Gruß micha

BigOne
27-11-2002, 19:43
Original geschrieben von micha
- der Rückgabewert von main () sollte vom Typ int sein, nicht void.
Warum denn nicht void, die Funktion gibt doch nichts zurück.

micha
27-11-2002, 20:13
Original geschrieben von BigOne
Warum denn nicht void, die Funktion gibt doch nichts zurück.

Eben nicht, die main Funktion gibt sehr wohl einen Wert zurück, Beispiel:



int main (void)
{
return (0);
}


Wenn Du das Programm ( ich nenns mal exit_test ) ausführst, und danach den Exit-Status abfrägst, bekommst Du den Rückgabewert der main Funktion:



micha@workstation snippets $ ./exit_test
micha@workstation snippets $ echo $?
0
micha@workstation snippets $


Das Gleiche bei einem anderen Rückgabewert:



int main (void)
{
return (255);
}


Rückgabewert:



micha@workstation snippets $ ./exit_test
micha@workstation snippets $ echo $?
255
micha@workstation snippets $


Zusätzlich müsste eigentlich Dein Compiler ne Warnung ausgeben, wenn Du die main Funktion mit void deklarierst:



micha@workstation snippets $ g++ -o test test.cc
test.cc:4: `main' must return `int'
micha@workstation snippets $


Gruß micha