Habs im anderen Thread ja schon angesprochen.....
Hab die ganze Kiste mal eben nachbauen können....
Bevor ihr den Code euch anguckt... JAHAAA ich weiß if else if else if else ist extrem unschön.... darum gehts auch nicht.... ^^
So mein Problem hier.... bla blub wird eingegeben.... ich soll was eingeben, nach der eingabe wird eine andere Funktion aufgerufen die die übergebenen werte einfach nur ausgibt.... danach spring ich ja zurück... die if verzweitung wird beendet und das nächste auf der liste wäre listener(); ... da springt er rein.. führt direkt ein leeres kommand aus ich lande bei execute() in der else verzweigung und bekomme 1x ein hä? nix verstehen zurück.... dannach springt er wieder in listener(); rein und alles ist tutti...
Ausgabe:
Das Problem lässt sich vermutlich umgehen indem ich einfach eine Funktion schreibe die sich um die Eingabe kümmernt, bzw die Eingabe entgegen nimmt und dann an setUser() weiter leitet....
Trotzdem würd ich gern wissen, warum cin.clear(); und cin.sync(); nix bewirken.... egal wo ich sie hin setzte.... nach bla blub wird der listener 2x ausgeführt bzw einmal eine leere eingabe übermittelt....
[EDIT]
Nein das problem lässt sich nicht beheben indem ich ne getUser() funktion schreibe...
Und auch ganz egal wo ich cin.clear(); cin.sync setzte.... es wird immer einmal ein leeres command ausgegeben....
Der Hinweis mit dem Puffer kam überigns noch aus dem anderen Forum, bevor ich einen ähnlichen code gepostet hatte und den netten Hinweis ich soll das progammieren an den Nagel hängen ich hätte keine ahnung und wäre nicht bereit bücher zu lesen und google zu benutzen ^^
Hab die ganze Kiste mal eben nachbauen können....
Bevor ihr den Code euch anguckt... JAHAAA ich weiß if else if else if else ist extrem unschön.... darum gehts auch nicht.... ^^
Code:
#include <iostream>
#include <sstream>
void listener();
void execute(std::string[]);
void setUser(std::string, int, float);
int main() {
std::cout << "Mein Program Bla Blub" << std::endl;
listener();
return 0;
}
void listener() {
std::cout << "> ";
std::string cmd[3];
std::string line;
getline(std::cin, line); // get the entire line
std::istringstream stream(line);
for (int i=0; stream.good(); i++) {
stream >> cmd[i];
}
execute(cmd);
}
void execute(std::string cmd[]) {
if(cmd[0] == "test") {
std::cout << "du hast " << cmd[0] << " eingegeben" << std::endl;
} else if (cmd[0] == "bla") {
if(cmd[1] == "blub") {
std::string name;
int age;
float height;
std::cout << "Name eingeben: ";
std::cin >> name;
std::cout << "\nAlter eingeben: ";
std::cin >> age;
std::cout << "\nGröße eingeben: ";
std::cin >> height;
setUser(name, age, height);
} else {
std::cout << "Du vogel hast blub vergessen!" << std::endl;
}
} else {
std::cout << "Hä? nix verstehen!" << std::endl;
}
listener();
}
void setUser(std::string aString, int bInt, float cFloat) {
std::cout << "Name: " << aString << std::endl;
std::cout << "Alter: " << bInt << std::endl;
std::cout << "Gröpe: " << cFloat << std::endl;
std::cout << "sehr interessant... ende setUser()" << std::endl;
}
Ausgabe:
Code:
[sada@arch Debug]$ ./codetests
Mein Program Bla Blub
> bla blub
Name eingeben: Test
Alter eingeben: 123
Größe eingeben: 435.45
Name: Test
Alter: 123
Gröpe: 435.45
sehr interessant... ende setUser()
> Hä? nix verstehen!
>
Das Problem lässt sich vermutlich umgehen indem ich einfach eine Funktion schreibe die sich um die Eingabe kümmernt, bzw die Eingabe entgegen nimmt und dann an setUser() weiter leitet....
Trotzdem würd ich gern wissen, warum cin.clear(); und cin.sync(); nix bewirken.... egal wo ich sie hin setzte.... nach bla blub wird der listener 2x ausgeführt bzw einmal eine leere eingabe übermittelt....
[EDIT]
Nein das problem lässt sich nicht beheben indem ich ne getUser() funktion schreibe...
Und auch ganz egal wo ich cin.clear(); cin.sync setzte.... es wird immer einmal ein leeres command ausgegeben....
Der Hinweis mit dem Puffer kam überigns noch aus dem anderen Forum, bevor ich einen ähnlichen code gepostet hatte und den netten Hinweis ich soll das progammieren an den Nagel hängen ich hätte keine ahnung und wäre nicht bereit bücher zu lesen und google zu benutzen ^^
Zuletzt bearbeitet: