Getline wird nicht beachtet
-
Da ist so erstmal kein Fehler drin.
Zeig mehr Code...Bzw: Step mal mim Debugger durch.
-
An dem Code fällt mir keine Fehler auf. Also ist er in einem anderen Programmteil, zum Beispiel beim Funktionsaufruf die Klammern vergessen. Müßtest den Rest des Programms auch zeigen. Optimalerweise so, daß wir es einfach auf dem eigenen Rechner ausprobieren können, also ein kleines aber vollständiges Programm.
-
Hier ist der code der bis zu dieser stelle verwendet wird...
Sonstige Verbesserungsvorschläge auch gerne erwünscht
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; void rig(); void start(); void ver(); void ent(); void bad(); void ende(); bool sv1{1}, sv2{1}; int main() { if (::sv2) { rig(); } if (::sv1) { start(); } return 0; } void rig() { cout << "Krypto \n VERSION 1.3\n ENGLISH \n ALL RIGHTS RESERVED BY JBD \n"; sv2=0; return; } void start() { cout << "\n [A] Text encoding"; cout << "\n [B] Text decoding"; cout << "\n [E] End"; cout << "\n \n Your input: "; char want{0}; cin >> want; switch (want) { case 'A': ver(); break; case 'a': ver(); break; case 'B': ent(); break; case 'b': ent(); break; case 'E': ende(); break; case 'e': ende(); break; default: bad(); } main(); } void ver() { string text; getline(cin, text); ofstream encode; encode.open("encode.txt"); encode << text; encode.close(); return; }
-
volkard schrieb:
Haste vorher zufällig einen int eingelesen und das \n nach dem int hängt noch im Eingavepuffer rum?
JBHillmann schrieb:
Nein das kann nicht sein dies ist das erste das eingelesen wird...
JBHillmann schrieb:
cin >> want;
Zwar kein int sondern ein char, hat aber den gleichen Effekt.
Sonstige Verbesserungswünsche: Lass die globalen Variablen raus, ruf main nicht rekursiv auf.
-
patrick246 schrieb:
Sonstige Verbesserungswünsche: Lass die globalen Variablen raus, ruf main nicht rekursiv auf.
main rekursiv aufzurufen ist nicht einmal erlaubt.
-
JBHillmann schrieb:
Sonstige Verbesserungsvorschläge auch gerne erwünscht

Dieses Buch schnell wegwerfen! Das ist kein C++, sondern irgendwas anderes. Erinnert an Wolf.
-
Ok danke und wie kann ich das beheben?
Was bedeutetpatrick246 schrieb:
ruf main nicht rekursiv auf.
?
Ist tatsächlich das Buch von Jürgen WOlf

-
JBHillmann schrieb:
Ok danke und wie kann ich das beheben?
Was bedeutetpatrick246 schrieb:
ruf main nicht rekursiv auf.
?
Schreib nicht main() als Funktionsaufruf.
-
Ahh ok danke
werd ich ändern
und was ist jetzt mit dem eigentlichen Problem? wie bekomm ich das \n
das im Eingabepuffer gammelt weg?
-
-
#include <limits> cin.ignore(numeric_limits<streamsize>::max(), '\n'); // verwirf max() Zeichen, bis du auf newline oder EOF stößt
-
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; //Vorwärtsdeklarationen sind eigentlich nicht nötig. Sinnlos viel Arbeit. //Schlechte Namen, als Leser erkenne ich nicht, was die machen. void rig(); void start(); void ver(); void ent(); void bad(); void ende(); //Uniforme Initialisierung ist hier fürn Popo. //Und bools mit 1 initialisieren? true!!! //Das ist ja C und kein C++. //sv? Sagt mir nix. bool sv1{1}, sv2{1}; int main() { if (::sv2) { rig(); } if (::sv1) { start(); } return 0;//darf man weglassen } void rig() { cout << "Krypto \n VERSION 1.3\n ENGLISH \n ALL RIGHTS RESERVED BY JBD \n";//\n am ENDE sv2=0;//false return;//störend } void start() { cout << "\n [A] Text encoding";//\n am ANFANG, inkonsistent. cout << "\n [B] Text decoding"; cout << "\n [E] End"; cout << "\n \n Your input: "; char want{0};//Wozu auf 0 setzen? Warum die häßliche {}-Syntax? cin >> want; switch (want) { case 'A': ver(); break; case 'a': ver(); break; case 'B': ent(); break; case 'b': ent(); break; case 'E': case 'e': ende(); break;//oder einfach so: default: bad(); } main();//verboten! } void ver() { string text;//später getline(cin, text); ofstream encode;//konstuktor encode.open("encode.txt");//konstruktor! encode << text; encode.close();//DESTRUKTOR!!! return;//sinnlos }
-
Ok Problem gelöst funktioniert nun

Vielen Dank an euch
und wiedermal sehe ich wie ich als Anfänger extrem viel zu lernen habe und das hier dinge kritisiert werden die ich meinem "Lernbuch" gleichtue...
Soll ich anstant Vorwärtsdeklarationen zu machen die main() ans Ende setzen?
-
JBHillmann schrieb:
Soll ich anstant Vorwärtsdeklarationen zu machen die main() ans Ende setzen?
Ja.
Und FALLS doch mal eine gebrauch werden würde, kannste immernoch eine machen.Hier wird sie gebraucht, weil sich Funktionen gegenseitig aufrufen. Aber der main()-Trick ist eh nicht gut.
-
Problem: Die start() gibt keinen bool zurück!
Gute Lösung:
int main() { cout << "Krypto \n VERSION 1.3\n ENGLISH \n ALL RIGHTS RESERVED BY JBD \n"; while(start()) ; }Seine start() gibt nix zurück, aber genau dort kann er nur feststellen, ob der Benutzer aufhören will. Also ruft der Auto die main() auf. Mit dem Problem, daß der Into-Text immer kommt und nicht nur einmal, also legt er globale Variablen an und schreibt
if (::sv2) { rig(); }Wie schrecklich. Und abgesehen von allen Dummheiten steckt einfach in jedem Detail Mist. Zum Beispiel hätte es sein sollen
if (sv2) { rig(); sv2=false; }dann sieht man hier, was das bedeuten soll: Nur einmal anzeigen. Die Zuweisung wegzuverstecken hilft doch genau gar keinem. Ich bin mit dem Code runherum nicht einverstanden.
-
volkard schrieb:
ofstream encode;//konstuktor encode.open("encode.txt");//konstruktor! encode << text; encode.close();//DESTRUKTOR!!! return;//sinnlos }und warum regt man sich hier über encode.close(); auf?
-
JBHillmann schrieb:
und warum regt man sich hier über encode.close(); auf?
Weil Du später Code schreiben wirst, der überall Exceptions werfen könnte, und da bringt close() nichts mehr. Also wozu erst angewöhnen?
-
Weil es unnötig ist. encode wird automatisch mit verlassen des Scopes geschlossen.
-
ohh ok also schlicht unnötig
-
ofstream encode;//konstuktor encode.open("encode.txt");//konstruktor!und hier ist was falsch? Ohne eins von beidem funktionierts nicht?
~(Edit v. Arcoth, Code-Tags)~