Problem mit while - Schleife
-
langer quelltext mit goto ist unbedingt zu vermeiden. 1. wird es extrem unübersichtlich und 2. überspringt man gerne mal deklarationen oder andere wichtige teile. ich behaupte mal, das so gut wie jedes problem ohne goto zu lösen ist.
Zum Einrücken: in deinem Eingangspost besteht das einrücken nach der ersten if bedingung aus 2 tabs und das noch vor der geschweiften klammer. danach ist es nur ein leerzeichen. jetzt postet du code, wo du nach der geschweiften klammer einrückst und zwar auch wieder mit 2 tabs. Bisschen inkonsistent

-
Meine Frage zum einrücken war auf die Zeile 12 zu Zeile 13 gemünzt.
Ich weiß jetzt nicht wie universell dein Rechner ist, hab aber den Verdacht, wenn du deine Schleifen optimierst das du deinen Quelltext deutlich kürzer und einfacher lesbar für dich und andere schreiben kannst.
Nur geraten, wie viel Klammern öffnest du maximal gleichzeitig?
MfG f.-th.
-
Naja bei meinem Editor sind irgendwie die Tabs unkonsistent, ich benutze DevC++..

Aber wenn nur das mit der Länge der Einzüge nicht stimmt, bin ich ja noch beruhigt!
Hat man hier die Möglichkeit Dateien an einen Comment anzuhängen?
-
Bei Zeile 12 und 13 hab ich keine Einzüge gemacht, den Code hab ich da auch nur erstmal vorübergängig geschrieben um etwas auszuprobieren.
Ich öffne in meinem Code oft mehrere (3 oder 4) geschwungene Klammern miteinander, ist das schlimm?
-
shivan schrieb:
Naja bei meinem Editor sind irgendwie die Tabs unkonsistent, ich benutze DevC++..

Aber wenn nur das mit der Länge der Einzüge nicht stimmt, bin ich ja noch beruhigt!
Hat man hier die Möglichkeit Dateien an einen Comment anzuhängen?
Nein, aber du kannst sie bei einem Freehoster hochladen

-
shivan schrieb:
Bei Zeile 12 und 13 hab ich keine Einzüge gemacht, den Code hab ich da auch nur erstmal vorübergängig geschrieben um etwas auszuprobieren.
Ich öffne in meinem Code oft mehrere (3 oder 4) geschwungene Klammern miteinander, ist das schlimm?
So könnte man einrücken. Extrembeispiel:
if (...) { if (...) { do { DoSomething1(); if (...) { for (...) { // ... DoSomething2(); } } } while (...); } DoSomething3(); }
-
Freehoster? Wie funktioniert das genau?
-
3 bis 4 geöffnete Klammern sollten noch lesbar sein.
Du hast bei deinem Beispiel aber schon mindestens 4 geöffnet.Warum nimmst du den DEV?
Hast du schon mal den Code::Blocks mit z.B. mit dem MinGW oder einem anderen Compiler getestet? Da kannst du deinen Quelltext, auch nachträglich, mit 2 oder 3
Mausklicks formatieren.MfG f.-th.
-
Nein, den hab ich noch nie getestet.
Ich benutze DevC++, weil wir den in der Schule benutzen und ich mich dran gewöhnt hab, doch ich werde mir den andern auch mal angucken. Wichtig ist mir nur, das er Freeware ist.
-
Ich habe hier meinen Source Code raufgeladen: http://ul.to/v47xr7
Ich muss meine Aussage von vorhin korrigieren, ich habe viel mehr als 3, 4 Klammern gleichzeitig geöffnet!
Vielleicht könnt ihr es mal angucken und sagen, was ihr davon haltet und was ich verbessern kann.
Zudem hab ich noch ein Problem, meine Addition bzw. Subtraktion Funktion im Programm gibt ganz komische Zahlen aus, hat aber vorhin tadellos funktioniert, obwohl ich nichts daran verändert hab.
Kann sich das jemand anschauen? Wär wirklich nett, denn ich weiss nicht mehr weiter

Addition:
Zeile 512
Subtraktion:
Zeile 551
MfG Shivan
-
Ich hab doch kürzlich wo gelesen, dass DevC++ ziemlich schlecht ist.
Ich würd dir Code::Blocks empfehlen oder Visual C++ die Express-Edition.Wobei ich mehr zu Code::Blocks tendiere:
Code::Blocks: http://www.chip.de/downloads/Code-Blocks_32146961.html
VC++: http://www.microsoft.com/germany/express/download/downloaddetails.aspx?p=vcpp
Lg Mentras
-
Danke dir, dann werd ich gleich mal Code::Blocks ausprobieren!
Ich finde persönlich finde DevC++ auch nicht wirklich gut, obwohl ich keine Vergleiche habe, da erst mit dem und dem normalen Windows Editor C++ programmiert habe.
-
Code::Blocks macht mir auf jedenfall schon einen ganz guten Eindruck, vorallem dass er die Zusammenhänge der Klammern anzeigt und sie sich ausblenden lassen.
Danke nochmals!

-
Du solltest dir unbedingt Funktionen genauer anschauen. In deinem Code ist so viel Code, der sich wiederholt. Das macht ihn natürlich unnötig lang.
Die Gotos machen den Code schließlich noch unübersichtlicher.Warum dein Code nicht so funktioniert, wie du das willst, lässt sich wegen des sehr unübersichtlichen Codes auch nicht so einfach sagen.
-
Außerdem solltest du fflush(stdin) nicht aufrufen. Soweit ich weiß, ist das Resultat undefiniert. Es kann also alles mögliche passieren. Auch solltest du versuchen deine Variablen so lokal wie möglich zu halten.
-
Wie schon geschrieben, hab ich ein Problem mit meiner Addition und Subtraktion Funktion, ich habe mir gedacht, dass es mehr Sinn macht, den Code hier zu posten.
Addition
if(rechnerauswahl == 1) { system("cls"); cout << " Addition"<<endl; cout << "----------"<<endl; cout << " Bitte geben Sie die Anzahl der Summanden ein: "; cin >> anzahl; cout <<endl; for (int i=1; i<=anzahl; i++) { cout<<" "<< i <<". Summand eingeben: "; cin>>eingabezahl; loesung+=eingabezahl; } cout <<endl; cout<<" Resultat: "<<loesung<<endl; cout <<endl; do{ cout << " M"<<oe<<"chten Sie noch noch eine Umrechnung durchf"<<ue<<"hren? (j/n)"<<endl; cout << " Dr"<<ue<<"cken Sie H um zum Hauptmen"<<ue<<" zur"<<ue<<"ck zu kehren."; cin >> wiederholen; cout << endl; if(wiederholen == 'j' || wiederholen == 'J') { goto berechnungen; //Sprung zu berechnungen } if(wiederholen == 'h' || wiederholen == 'H') { goto hauptmenue; } else if(wiederholen == 'n' || wiederholen == 'N') { danke(); } }while(wiederholen != 'h' && wiederholen != 'H' && wiederholen != 'j' && wiederholen != 'J' && wiederholen != 'n' && wiederholen != 'N'); }Das einzig Neue ist die do while Schleife in Zeile 20 bzw. 37, doch das sollte ja die Funktionsweise des Rechners nicht beeinflussen.
Beispiel einer Ausgabe des Programms:
Addition
----------
Bitte geben Sie die Anzahl der Summanden ein: 51. Summand eingeben: 100
2. Summand eingeben: 100
3. Summand eingeben: 100
4. Summand eingeben: 100
5. Summand eingeben: 100Resultat: 540
Möchten Sie noch noch eine Umrechnung durchführen? (j/n)
Drücken Sie H um zum Hauptmenü zurück zu kehren.Manchmal funktioniert er, manchmal nicht.
-
Wo wird die Variable
loesunginitalisiert? Ohne Initalisierung kann diese Variable jeden Wert haben ==> Ergebnis undefiniert.
-
BBBB schrieb:
Du solltest dir unbedingt Funktionen genauer anschauen. In deinem Code ist so viel Code, der sich wiederholt. Das macht ihn natürlich unnötig lang.
Die Gotos machen den Code schließlich noch unübersichtlicher.Warum dein Code nicht so funktioniert, wie du das willst, lässt sich wegen des sehr unübersichtlichen Codes auch nicht so einfach sagen.
Danke für deine Tipps, doch wie kann ich schlussendlich den Code kürzer fassen? Die einzige Möglichkeit, die mir so spontan einfällt ist Structs, doch die hab ich integriert wos mir möglich war.
-
BBBB schrieb:
Wo wird die Variable
loesunginitalisiert? Ohne Initalisierung kann diese Variable jeden Wert haben ==> Ergebnis undefiniert.Sie ist eine globale Variable und wird am Anfang der Funktion main() definiert.
-
Quatsch, sie wird vor dem Menü des Rechners, wo man Addition Subtraktion ... auswählen kann deklariert.