[Anfänger]Switch Case mit Funktion Code
-
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.
-
Was spricht denn gegen
string korrekt; getline(cin, korrekt);
?
-
Hallo,
Ich hab mal wieder ein neues Problem
Das irgentwie nicht lösbar für mich ist.
Ich hab dran 1 Stunde gearbeitet aber es funktioniert einfach nicht egal was ich mache.
Und nun bitte ich euch mir zu helfen.
Bin noch ein neuling und aus fehlern lernt man.
Also es geht um folgendes
Ich hab eine Funktion erstellt und in dieser Funktion wird eine Klasse erstellt
Und direkt da runter soll die Klasse einen Namen bekommen und daraufhin sollen die
Einzelnen Variabeln bestimmt werden und danach sollen die Varibeln in einem Cout Befehl aufgerufen werden aber es funktioniert irgentwie nicht.
Versteht mich nicht falsch ich bin kein Fan von Waffen oder jeglichem aber mit waffen lassen sich einfachere Variabel namen machen wie Name Preis Druch etc.
Ich bin gegen Krieg und Waffen.Hier mal die fehlermeldungen:
C:\Dev-Cpp\Yardgame2.cpp In functionint func1(int)': 80 C:\\Dev-Cpp\\Yardgame2.cpp non-local function \
func1(int)::M4 sturmgewaehr()' uses local type `func1(int)::M4'
81 C:\Dev-Cpp\Yardgame2.cpp request for member `M4_Name' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 82 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_preis' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 83 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_druck' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_Name' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
preis_M4' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
druck_M4' in `sturmgewaehr', which is of non-class type `func1(int)::M4 ()()'
C:\Dev-Cpp\Makefile.win [Build Error] [Yardgame2.o] Error 1Und hier mal der Code von der Funktion und alles was damit zu tun hat
int func1(int classic = 1); void AK::abzugdruck() //hier wird die Func1 aufgerufen { func1(); staerke = 55; } int func1(int classic) { class M4 //Das ist die klasse { public: double preis_M4; string M4_Name; int druck_M4; }; M4 sturmgewaehr(); sturmgewaehr.M4_Name = "M4-Sturmgewaehr"; sturmgewaehr.M4_preis = 25,500; sturmgewaehr.M4_druck = 25; cout << "Die Waffen werden für den Krieg gebraucht ):" << endl; cout << "Die " << sturmgewaehr.M4_Name() << " Kostet " << sturmgewaehr.preis_M4() << " Und hat einen Wiederstand von " << sturmgewaehr.druck_M4() << endl; }
Und hier mal der Komplette quelltext:
#include <cstdlib> #include <iostream> using namespace std; void func(); int func1(int classic = 1); class AK { string name; int staerke; public: double preis; string druck; //Rückgabewert <Name der Methode> Parameterliste void abzugdruck(); //void setGeschwindigkeit(int g); int getstaerke(); string getName(); AK(string n); ~AK(); }; AK::AK(string n) { name = n; staerke = 50; preis = 2999; druck = "Mittlerer Druck"; cout << "Die Waffe wurde verkauft" << name << endl; } AK::~AK() { cout << "Die Ak wurde verkauft" << endl; } void AK::abzugdruck() { func1(); staerke = 55; } int AK::getstaerke() { return staerke; } string AK::getName() { return name; } int main() { AK Automatikk("Automatik"); Automatikk.abzugdruck(); func(); Automatikk.getstaerke(); cout << "Du hast die AK abgefeuert Staerke = " << Automatikk.getstaerke() << endl; system("PAUSE"); } void func() { AK Schalldampf("Schalldaempfer"); } int func1(int classic) { class M4 { public: double preis_M4; string M4_Name; int druck_M4; }; M4 sturmgewaehr(); sturmgewaehr.M4_Name = "M4-Sturmgewaehr"; sturmgewaehr.M4_preis = 25,500; sturmgewaehr.M4_druck = 25; cout << "Die Waffen werden für den Krieg gebraucht ):" << endl; cout << "Die " << sturmgewaehr.M4_Name() << " Kostet " << sturmgewaehr.preis_M4() << " Und hat einen Wiederstand von " << sturmgewaehr.druck_M4() << endl; }
-
Du hast da einen Klassiker erwischt: In Zeile 19 wird kein default-konstruiertes Objekt angelegt, sondern eine Funktion deklariert, die keine Parameter übernimmt und ein M4 zurückgeben soll.
PS: Außerdem wird in C++ der Punkt als Dezimaltrenner verwendet, das Komma in
sturmgewaehr.M4_preis = 25,500;
hat eine andere Funktion.PPS: Und "Sturmgewehr" schreibt man ohne a
-
CStoll schrieb:
Du hast da einen Klassiker erwischt: In Zeile 19 wird kein default-konstruiertes Objekt angelegt, sondern eine Funktion deklariert, die keine Parameter übernimmt und ein M4 zurückgeben soll.
PS: Außerdem wird in C++ der Punkt als Dezimaltrenner verwendet, das Komma in
sturmgewaehr.M4_preis = 25,500;
hat eine andere Funktion.PPS: Und "Sturmgewehr" schreibt man ohne a
Danke schön aber ich weiß leider nicht was ein default-konstruiertes Objekt ist ??
Kannst/Könnt du/ihr mir ein Beispiel Zeigen
Und das mit PS und PPS ist ja mal ein Fail von meiner seite aus das wird ausgebessert.Vielen Dank für die hilfe
-
Ein default-konstruiertes Objekt ist etwas, was du mit dem Default-Konstruktor angelegt hast (d.h. der Konstruktor ohne PArameter, den dir der Compiler zur Not auch selber anlegen kann). Sowas erhältst du am einfachsten durch die Angabe
M4 sturmgewehr;
(ohne die Klammern dahinter).
-
CStoll schrieb:
Ein default-konstruiertes Objekt ist etwas, was du mit dem Default-Konstruktor angelegt hast (d.h. der Konstruktor ohne PArameter, den dir der Compiler zur Not auch selber anlegen kann). Sowas erhältst du am einfachsten durch die Angabe
M4 sturmgewehr;
(ohne die Klammern dahinter).Dankeschön jetzt klappts
Edit: Doch nicht ich bekomm die Fehlermeldungen:
C:\Dev-Cpp\Yardgame2.cpp In functionint func1(int)': 85 C:\\Dev-Cpp\\Yardgame2.cpp no match for call to
(std::string) ()'
85 C:\Dev-Cpp\Yardgame2.cppsturmgewehr.func1(int)::M4::preis_M4' cannot be used as a function 85 C:\\Dev-Cpp\\Yardgame2.cpp
sturmgewehr.func1(int)::M4::druck_M4' cannot be used as a function
C:\Dev-Cpp\Makefile.win [Build Error] [Yardgame2.o] Error 1
-
Kann mir niemand helfen mit den Oben genannten Problem?