Fragen zu meinem Code.
-
oh ... hat er wahrscheinlich eben nicht kopiert... main funktion besteht natürlich^^
wie kann ich den Code denn einfassen ??
-
Klicke einfach bei deinem obigen Beitrag auf "Editieren" und schreibe das Start- und Endtag jeweils an den Anfang und Ende deines Codeabschnitts (die "C/C++"-Schaltfläche im Editiermodus bewirkt dasselbe).
-
Ok,danke hab ich gemacht.
Wäre echt cool wenn du mal drüber schauen könntest.. sind bestimmt viele Fehler drinne.
Vielleicht kannst mir ja auch nochmal das mit den Rückgabewerten sagen und noch paar Tipps geben xDDDlg
-
Also, soweit ich weiss, kannst du auch in structs keine Defaultwerte für Elemente angeben, du müsstest die Elemente Energie und Gesundheit also nachdem du Charakter deklariert hast initialisieren.
Was ist eigentlich mit deinen anderen Fragen passiert? Vor dem Edit hattest du tatsächlich welche im Code stehen, glaube ich.
Edit: ich sehe gerade, dass das wohl in deinem anderen Thread war.
-
ja die sind jetzt raus ... mist xD
Die fragen gingen hauptsächlich um Funktionen im allgemeinen...
Von wegen Rückgabewerte... Deshalb auch die Frage welche Parameter ich bei der Funktion
NeuerChar() angeben muss und welchen Rückgabewert, verstehe die ganze Thematik irgendwie nich so richtig...
mhm aber wenn ich die defaultwerte weg mache sind die Bezeichner nicht deklariert.
Könntest mir vielleicht den Code ändern? wenn ich das sehe kann ich mir das gut merken

-
Also, grundsätzlich können Funktionen Werte mit return zurückgeben (z.B. vom Typ int aber im Prinzip geht praktisch jede Datenstruktur), müssen es aber nicht.
Deine Credits-Funktion bzw. Prozedur gibt beispielsweise nichts zurück (void).
NeuerChar gibt zwar einen int-Wert zurück, aber da dort nirgendwo eine return-Anweisung steht, ist der Rückgabewert nicht definiert (zurückgegeben wird das, was gerade dort im Speicher stand).
Den Rückgabewert einer Funktion kannst du weiterverwenden, z.B. mitint return_val=NeuerChar();Auch können Funktionen Parameter übernehmen, ganz ähnlich wie in der Mathematik.
int quadriere(int x) { return x*x; }Wenn dir das alles noch nicht klar sein sollte, würde ich auf jeden Fall empfehlen, das Thema noch mal ganz genau in einem Tutorial nachzulesen, weil das sind ganz klar wichtige Grundlagen.
-
Danke erstmal.
Ja ok, lese im moment das Buch von Heiko Kalista.Hab ja unten in der Funktion
NeuerChar ()Die Eingabe eines Namens, wenn ich aber das Spiel ausführe und auf Neues Spiel gehe , komme ich erst garnicht zur Eingabe vom Namen , Klasse usw... da bleibt er irgendwie hängen....
Und zurück will ich eigentlich nur das in der main Funktion steht...
Charakter XXXX wurde erstellt
und halt die Ausgabe aus der Funktion
Klase: X
Name: X
Gesundheit: X
Energie: Xvielleicht kannst mir ja wieder helfen

-
Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
struct Character { unsigned int health; unsigned int energie; char name[30]; char race[10]; Character() : health(150), energie(75) {} }; void new_character() { Character Charakter; std::cout << "Bitte waehlen Sie eine Klasse: \n\n" << "(1) Krieger\n" << "(2) Schurke\n" << "(3) Magier" << std::endl; std::cin.getline(charakter.race, 9); // get holt EIN Zeichen std::cout << "Bitte geben Sie ihrem Helden einen Namen: "; std::cin.getline(Charakter.name, 29); std::cout << "Ihr Charakter:" << "\n" << "Klasse: " << Charakter.race << "\n" << "Name: " << Charakter.name << "\n" << "Gesundheit: " << Charakter.health << "\n" << "Energie: " << Charakter.energie << "\n" << std::endl; }... so du hast bei Gesundheit und Energie unten bei der Ausgabe vergessen, das die Variablen Teil des Objektes Charakter sind. Dann kann die struct in den Globalen Namensraum. Hast noch ein paar Probleme bei den Grundlagen ... von d.h. lass ich das jetzt so. Sonnst würde man da noch einiges optimieren

void Credits () { std::cout << "????? Beta V0.1\n" << "written by mano_zenn\n" << std::endl; }std::cout ist für eine gepufferte Ausgabe zuständig. D.h. bewirkt ein std::endl, das ein Newlinezeichen('\n') in den Buffer geschoben wird und der dann geflusht (std::flush) wird, d.h. zur Anzeige gebracht wird
Deswegen ist deine Zeile so nicht ganz sinnvoll.
Achja ... bei der Numerierung der Version ... 1.0 ist ja übertrieben, oder ist das schon die 1. endgültige Version?
-
Hehe nene hab nur irgendwas reingeschrieben.... v1.0 löl egal was :p
will einfach bissl rumspielen, um besser mit den Grundlagen klar zu kommen...
Hätte da noch ne Frage... Ist es besser anstatt diesen Switch-Case Block in die main Funktion zu schreiben, ihn direkt in eine Funktion zu fassen.
Sagen wir einfach ...
void Zeigemenu ();Falls das besser ist, wäre meine nächste Frage, wie kann ich Funktionen in Funktionen schreiben ?? muss ich die Funktion dann auch über der main angeben?
Ich zeig einfach mal meinen neuen Code.
#include <iostream> #include <cstdlib> using namespace std; //Funktionen void Credits (); void Zeigemenu (); void Warten (); int main () { Zeigemenu (); Warten (); return 0; } void Credits () { cout << "????? Beta v1.0" << endl; cout << "written by mano_zenn"; cout << "\n\n"; } void Zeigemenu () { char Auswahl; do { cout << "??????????????" << endl; cout << "--------------" << endl; cout << "(N)eues Spiel" << endl; cout << "(O)ptionen" << endl; cout << "(I)nfos" << endl; cout << "(B)eenden\n\n" ; cout << "Auswahl: "; cin >> Auswahl; switch (Auswahl) { case ('n'): case ('N'): { cout << "Bitte erstellen Sie einen Charakter" << endl; //NeuerChar () Das soll eine neue Funktion werden die in der Funktion verzweigt ist... geht das ?? ;}break; case ('o'): case ('O'): { }break; case ('i'): case ('I'): { Credits (); }break; case ('b'): case ('B'): { // Hier soll er ja beenden, geht aber nicht die Schleife läuft immer weiter... cout << "Bis zum naechsten Mal" << endl; return; }break; default : { cout << "Ungueltige Eingabe" << endl; } } }while (Auswahl != 'b' || Auswahl != 'B'); cout << "Bis zum naechsten Mal" << endl; } void Warten() { // Für eine Erklärung siehe Konsolen-FAQ (Automatisches Schließen // verhindern) cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get(); }
-
*schieb*
damit meine obige Frage noch beantwortet wird

-
Hmm sitzt hier gerade an nem nit so dollen PC, d.h. kann sein das ich jetzt nicht alles überblicken kann(Desktop zu klein :D)
std::istream& clstream(std::istream& in) { in.sync(); in.clear(); in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }anstelle deiner Warten-Funktion

Hast wieder deine unschöne Version von der Credits-Funktion drin
void Credits () { std::cout << "????? Beta V0.1\n" << "written by mano_zenn\n" << std::endl; }cin >> Auswahl; switch (Auswahl)Mach da mal einfach
std::cin >> selection; switch (std::tolower(selection))draus. Dann wird aus 'A' ein 'a' usw. und du brauchst nur noch auf 'a' zu prüfen und nicht auf beide Versionen.
Und Ja du kannst deine Funktion in einer anderen Funktion aufrufen. Das einzigste was erfült sein muss: Es muss die Funktion vorher kenne. Das ist aber in deinem Fall ja so, da du sie vorher schon(vor main sogar) deklariert hast.