[Anfänger]Switch Case mit Funktion Code
-
OK, ich hab' richtig geraten - da fehlt der Funktions-Prototyp:
string start(string newgame = "Test Game");
(unbedingt vor der Funktion ergänzen, die dein switch enthält - und anschließend bei der Funktionsdefinition den Default-Parameter weglassen)
-
CStoll schrieb:
OK, ich hab' richtig geraten - da fehlt der Funktions-Prototyp:
string start(string newgame = "Test Game");
(unbedingt vor der Funktion ergänzen, die dein switch enthält - und anschließend bei der Funktionsdefinition den Default-Parameter weglassen)
Danke schön aber so funktionieren will das immer noch nicht er gibt die Cout meldung überhaupt nicht aus hier mal der Ganze Quellcode:
Falls ihr noch verbesserungen im Quellcode allgemein habt immer her damit.
Bin für alles offen.#include <cstdlib> #include <iostream> #include <conio.h> #include <stdlib.h> using namespace std; int sicher_ja_nein[2]; int Leben = 5; int start_game; int highscore_game; string name; int start2; string newgame; int highscore(Leben); int main() { cout << "Das ist das Yard Game Spiel" << endl; cout << "Bitte schreibe deinen Namen: " << endl; cin>>name; cout << "Dein Name Lautet: " << name << endl; cout << "Bist du dir sicher? 1=Ja 0=Falsch"<< endl; cin>>sicher_ja_nein[1]; if(sicher_ja_nein[1] == 0) { cout << "Bitte schreibe deinen Namen auf: " << endl; cin>>name; } else { cout << "Du bist dir sicher mit deinen Namen: " << name << endl; } char Auswahl; do { cout << "(N)eues Spiel" << endl; cout << "(O)ption" << endl; cout << "(C)redits" << endl; cout << "(B)eenden" << endl; cout << "Eingabe: " << endl; cin >> Auswahl; switch(Auswahl) { case ('N'): case ('n'): cout << "Neues Spiel wird gestartet" << endl; string start(string newgame = "Test Gaming"); break; case ('O'): case ('o'): cout << "Grafikeinstellungen werden gestartet" << endl; break; case ('C'): case ('c'): cout << "Entwickler: Bero01 Copyright 2011" << endl; break; case ('B'): case ('b'): cout << "Programm wird beendet" << endl; break; default: cout << "Keine Korrekte angabe" << endl; break; } getch(); system("cls"); } while(Auswahl != 'B' && Auswahl != 'b'); system("Pause"); return 0; } string start() { cout << "Neues Spiel wird gestartet Test2" << newgame << endl; return 0; }
-
Ich sagte vor, nicht in:
//Deklaration bzw. Prototyp: string start(string newgame = "Test Game"); int main() { ... //Verwendung start(); ... } //Definition - der Parameter ist immer noch nötig, damit der Compiler den Bezug zum Prototyp hat //der Defaultwert für den Parameter darf allerdings nur einmal angegeben werden - und das ist schon oben passiert string start(string newgame) { ... }
(ok, mit dem Default-Parameter habe ich mich vermutlich etwas knapp ausgedrückt)
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ (auch C++0x) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Brauchst du beide:
#include <cstdlib> // -> Die C++ Variante von stdlib.h #include ... #include ... #include <stdlib.h> // wenn du ohne diese Zeile auskommst, weg damit ... ... system("Pause"); // hab es nicht getestet - probier es mal ohne
-
Dankeschön alles funktioniert soweit ganz gut nur hab ich da noch ein Problem
Ich hab in der Funktion noch eine Switchcase anweisung reingecodet mit einer do-while Schleife aber sobald ich aber E eingebe also Ende stürtzt das Programm ab hier mal der Quellcode von der Funktion:string start(string newgame) { cout << "Neues Spiel wurde gestartet" << endl; cout << "---------------------------" << endl; cout << "Game Maker wurde gestartet..." << endl; cout << "Um was fuer ein Spiel-Type soll es sich handeln?\n Bitte waehle aus: " << endl; cout << "(A)benteuer" << endl; cout << "(S)hooter" << endl; cout << "(R)ennen" << endl; cout << "(E)xit" << endl; cout << "Eingabe: " << endl; cin >> Auswahl[2]; switch(Auswahl[2]) { case ('A'): case ('a'): cout << "Du hast Abenteuer ausgewaehlt" << endl; break; case ('s'): case ('S'): cout << "Du hast Shooter ausgewaehlt" << endl; break; case ('R'): case ('r'): cout << "Du hast Rennen ausgewaehlt" << endl; break; case ('E'): case ('e'): cout << "Programm wird beendet" << endl; //Programm Stürzt ab sobald ich e oder E eingebe mit der Meldung: "Yard Game.exe Funktioniert nicht mehr" break; default: cout << "Keine Korrekte angabe" << endl; break; }
-
Wo und wie ist denn
Auswahl
definiert worden? Deine Verwendung sieht auf jeden Fall merkwürdig aus und provoziert vermutlich Index-Überschreitungen und daraus ergebende Folgefehler.
-
CStoll schrieb:
Wo und wie ist denn
Auswahl
definiert worden? Deine Verwendung sieht auf jeden Fall merkwürdig aus und provoziert vermutlich Index-Überschreitungen und daraus ergebende Folgefehler.Es klappt nun es lag daran das ich die char Variabel Global war ich hab nun 2 Variabeln erstellt mit den namen Auswahl1 und Auswahl2
Auswahl1 ist in der Main Funktion
und Auswahl2 in der Start Funktion
Danke für die hilfe an alle.
-
es lag daran das ich die char Variabel Global war
Nein, es lag daran dass Array-Indizes in C++ bei 0 anfangen, und 2 daher der 3. Eintrag ist. In einem Array mit Grösse 2 gibt es aber keinen 3. Eintrag.
-
hustbaer schrieb:
es lag daran das ich die char Variabel Global war
Nein, es lag daran dass Array-Indizes in C++ bei 0 anfangen, und 2 daher der 3. Eintrag ist. In einem Array mit Grösse 2 gibt es aber keinen 3. Eintrag.
Achso das wusste ich nicht hab daran nicht gedacht.
Wie auch immer es funktioniert jetzt.
-
Hallo,
Ich hab nun wieder einen Peinlichen fehler aber ich komm nicht drauf ihn zu lösen hab alles versucht aber ich komm nicht auf den fehler.
Das Problem ist ich möchte das der Benutzer einen Namen eingibt und falls er sich verschrieben hat mit N für Nein den namen wieder neu schreiben kann.Aber das funktioniert nicht hier mal der quellcodestring name; char name_geben; cout << "Das ist das Yard Game Spiel" << endl; do { cout << "Bitte schreibe deinen Namen: " << endl; cin>>name; cout << "Dein Name Lautet: " << name << endl; cout << "Bist du dir sicher? y/n"<< endl; //Mit y oder n kann ich garnicht antworten da er sofort mit der aufforderung "Bitte schreib deinen Namen ein" kommt zum unteren teil kommt er garnicht. switch(name_geben) { case ('y'): case ('Y'): cout << "Du bist dir mit den namen: " << name << " sicher." << endl; break; case ('N'): case ('n'): cout << "Du bist dir mit den namen: " << name << " nicht sicher.\nGib bitte einen neuen Namen ein." << endl; cin>>name; cout << "Dein Name lautet nun: " << name << endl; break; } } while(name_geben != 'n' && name_geben != 'N');
Ich habs auch mit einer IF-Else schleife getestet aber es funktioniert nur einmal ich will das so haben solange er nicht mit Y oder y antwortet das er das immer wieder wiederholt.
Hoffentlich hab ich es nicht zu kompliziert erklärt.
-
bero36 schrieb:
Aber das funktioniert nicht
Abgesehen davon, dass das keine Fehlerbeschreibung ist, hast du vergessen irgendetwas für name_geben einzulesen.
-
Hat dir schon mal jemand gesagt, daß deine Einrückung grauenhaft ist?
Ansonsten solltest du nur an einer Stelle in der Schleife den Namen abfragen, sonst kommst du nur durcheinander:
string name; char korrekt; do { cout<<"Name eingeben"<<endl; getline(cin,name);//liest auch Namen mit Leerzeichen ein - bis zum ENTER cout<<"Ist "<<name<<" korrekt?"<<endl; cin.ignore(); cin>>korrekt; } while(toupper(korrekt)!='Y');
(beim Schreiben ist mir noch ein Fehler aufgefallen - du hast die Bedingung der Schleife vertauscht, dadurch kommst du zurück an den Anfang, wenn der Nutzer 'y' (oder irgendeinen Müll) eingegeben hat)
-
CStoll schrieb:
Hat dir schon mal jemand gesagt, daß deine Einrückung grauenhaft ist?
Ansonsten solltest du nur an einer Stelle in der Schleife den Namen abfragen, sonst kommst du nur durcheinander:
string name; char korrekt; do { cout<<"Name eingeben"<<endl; getline(cin,name);//liest auch Namen mit Leerzeichen ein - bis zum ENTER cout<<"Ist "<<name<<" korrekt?"<<endl; cin.ignore(); cin>>korrekt; } while(toupper(korrekt)!='Y');
(beim Schreiben ist mir noch ein Fehler aufgefallen - du hast die Bedingung der Schleife vertauscht, dadurch kommst du zurück an den Anfang, wenn der Nutzer 'y' (oder irgendeinen Müll) eingegeben hat)
Dankeschön für die hilfe ich werde es mir mit der Einrückung merken
Und das mit den If-Schleifen.de kenne ich schon
Aber es gibt da noch ein Problem irgentwie haut das nicht hin...
Ich hab diesen Quellcode eingegebenstring name; char korrekt; do { cout<<"Bitte Name eingeben"<<endl; getline(cin,name);//liest auch Namen mit Leerzeichen ein - bis zum ENTER cout<<"Ist "<<name<<" korrekt?"<<endl; cin.ignore(); cin>>korrekt; } while(toupper(korrekt)!='Y');
Aber sobald ich einen Namen eingebe und mit Y/y bestätige
Kommt dieser komische fehler
http://img849.imageshack.us/img849/8158/unbenanntyg.jpg
Ist ein Screenshot
Villeicht kannst du ja damit was anfangen
Zudem kann ich auch nicht die frage ob es korrekt sei nicht beneinen.
-
Hmm, da habe ich wohl noch einen kleinen Fehler in dem Code versteckt
- wenn du dir mal ansiehst, was ignore() macht, solltest du ihn eigentlich finden können.
-
CStoll schrieb:
Hmm, da habe ich wohl noch einen kleinen Fehler in dem Code versteckt
- wenn du dir mal ansiehst, was ignore() macht, solltest du ihn eigentlich finden können.
Hm...Ich hab mal das
cin.ignore();
entfernt aber sobald ich beispielsweise n oder irgentwas anderes eingebe kommt sowas dabei raus
Hier mal wieder ein Screenshot
http://img8.imageshack.us/img8/5205/unbenanntcld.jpg
-
Das ignore() sollte wohl an eine andere Stelle.
-
cooky451 schrieb:
Das ignore() sollte wohl an eine andere Stelle.
Ich hab mal das
cin.ignore();
unter
cin>>korrekt;
geschrieben jetzt klappt es aber einiger massen
Wenn ich jetzt nicht y drücke sonder no oder Nein schreibe kommt das dabei raus:
http://img835.imageshack.us/img835/9307/unbenanntcu.jpg
Ist ein Screenshot
Ich versuche mein bestes aber mitcin.ignore();
oder den anderen Code hab ich noch nie dran gearbeitet bitte helft mir auf die Sprünge.
-
#include <limits> std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
-
cooky451 schrieb:
#include <limits> std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Wunderbar!
Dankeschön funktioniert ich meld mich wieder falls ich ein Problem haben sollte.