|
MadBonsaiJr
|
| Titel: if verzweigung geht nicht |
18.01.2011 19:47 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
Hey, ich habe einen einfachen Taschenrechner gemacht aber irgendwas geht nicht (Code unten). Der Benutzer kann zwischen Plus und Minus wählen, dann gibt er 2 Zahlen an, die Plus bzw Minus gerechnet werden. Eigentlich simpel, oder? Tja, immer, wenn ich auswählen soll, welche Rechenart ich benutze, dann wird immer Plus gerechnet. Ich habe auch schon im Quellcode (ich habe 2 if-abfragen für die Rechenarten) die if anweisungen für Plus und Minus verändert... aber es ist immernoch das selbe wie vorher, dabei ist der Code eigentlich Fehlerfrei
Zitat: #include <iostream> #include <cstdlib> #include <cstdio>
using namespace std;
int main() { float z1; float z2; float ergebniss; string eingabe;
cout << "Willkommen im Taschenrechner" << endl; cout << "Copyright by Fabian 2011" << endl; cout << "-------------------------------" << endl;
anfang:;
cout << " 1 Plus" << endl; cout << " 2 Minus" << endl; cout << "--------------------------------------"; //Wird verschoben cout << endl << "Gibt die entsprechende Zahl ein: "; //Wird verschoben cin >> eingabe;
if (eingabe == "ende") { goto ende; }
// Plusrechnung if (eingabe == "1"); { cout << endl << "Gib die erste Zahl ein: "; cin >> z1; cout << endl << "Gib die zweite Tahl ein: "; cin >> z2; ergebniss = z1 + z2; cout << "--------------------------------------"; cout << endl << "Das Ergebniss ist: " << ergebniss; cout << endl << "--------------------------------------" << endl; goto anfang; }
// Minusrechnung if (eingabe == "2"); { cout << endl << "Gib die erste Zahl ein: "; cin >> z1; cout << endl << "Gib die zweite Tahl ein: "; cin >> z2; ergebniss = z1 - z2; cout << endl << "Das Ergebniss ist: " << ergebniss; cout << endl << endl; goto anfang; }
ende:; cout << endl << "Programm wird beendet!";
} Das mit dem Copyright ist natürlich nur ne Spielerei ^^ Als Compiler benutze ich Code::Blocks 10.05
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
locked_User0033
|
| Titel: if verzweigung geht nicht |
18.01.2011 20:14 |
|
|
Anmeldungsdatum: 18.01.2011
Beiträge: 5
Akzeptierte Antwort (+50 Punkte)
|
Du hast dem Programm im Endeffekt so wie du es jetzt geschrieben hast auch nur gesagt, dass er addieren soll.
Klick mal auf diesen Link: http://pastebin.com/4vzYjK1h
In Zeile 35 und 49 musst du das Semikolon hinter dem if() entfernen. ;)
Zeile 35 macht keine Abfrage. Das wird durch das ";" übersprungen. Deswegen geht der zum Addieren und dann , dank goto wieder zum Anfang. (=
[Zuletzt bearbeitet: 18.01.2011 20:15]
|
 |
|
| |
|
xero
|
| Titel: if verzweigung geht nicht |
18.01.2011 20:14 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Keine Semikolons hinter if. Damit beendest du die If-Anweisung sofort wieder. Tipps: Kein Goto verwenden. Ist kein schöner Programmierstile. Das Einlesen von z1 und z2 kannst du außerhalb der If-Anweisung machen. Wann immer du Code wiederholst kannst du schauen, wie sich das schöner refactorn lässt.
mfg
|
 |
|
| |
|
locked_User0033
|
| Titel: if verzweigung geht nicht |
18.01.2011 20:22 |
|
|
Anmeldungsdatum: 18.01.2011
Beiträge: 5
|
Versuch es doch mal mit ner While Schleife 
http://pastebin.com/4mN2YFJA
Würde dann in etwa so aussehen. ^^
|
 |
|
| |
|
xero
|
| Titel: if verzweigung geht nicht |
18.01.2011 20:57 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Die Code-Wiederholung in den ifs sollte man soweit auflösen, dass nur mehr die eine Zeile mit der Berechnung darin gekapselt ist. Der Rest ist ja identisch.
mfg
|
 |
|
| |
|
MadBonsaiJr
|
| Titel: if verzweigung geht nicht |
19.01.2011 20:49 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
@ xero: werde ich drauf achten! @ Binjou_1337: Okay, das mit dem Semikolon merk ich mir lieber ^^ Aber warum steht bei "while" das "(true)"? Ich denke mal "break" bewirkt, dass das Programm aus der aktuellen while schleife geht oder?
Nur mal aus Neugier (wenns so is wie ich oben sagte): Was wäre, wenn ich eine while schleife in einer anderen habe? Springt das Programm dann aus der innersten oder aus beiden?
Das mit goto wollte ich eigentlich schon geändert haben, doch dann haben halt die if-blöcke nicht mehr geklappt, daher wollte ich erstmal das Problem lösen!
Naja, das wichtigste ist ja gelößt
Edit: Ich habe das Programm jetzt umgeschrieben und es ein bisschen verändert. Ich denke nicht, dass die Funktionen Plus und Minus wirklich nötig sind, aber ich will ja (im Moment) keinen super Taschenrechner entwickeln, sondern die Technicken von C++ erlernen (garnich so leicht, wenn man nur ein Buch und das Internet hat)
Edit (nachm Edit): Wär toll, wenn ihr den einmal ausprobieren könntet
Hier der Code: http://pastebin.com/YXvvKSWP
[Zuletzt bearbeitet: 19.01.2011 21:13]
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
xero
|
| Titel: if verzweigung geht nicht |
19.01.2011 21:36 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
while(true) beschreibt eine Endlosschleife. Der Befehl while lässt nachstehende Anweisung(en) solange durchlaufen, solange der in Klammern stehende Ausdruck "true" ist. Ein while(i<2) würde solange Schleifen, bis i nicht mehr kleiner 2 ist. Übrigens: Weil true in der Informatik eigentlich '1' ist, bewirkt while(1) auch eine Dauerschleife. ;)
break beendet nur die Schleife in der du dich befindest.
Das Programm sieht besser aus. Habs jetzt nicht laufen lassen. Nächster Schritt: Die Ausgabe nicht in den Methoden Plus und Minus...Codewiederholung! Lieber kein void sondern ein float zurück geben lassen und in den Methoden nur die nackte Berechnung durchführen.
Und dann nur an einer Stelle die Ausgabe des Rückgabewertes.
mfg
|
 |
|
| |
|
MadBonsaiJr
|
| Titel: if verzweigung geht nicht |
20.01.2011 14:06 |
|
|
Anmeldungsdatum: 26.08.2009
Beiträge: 791
 |
Tutorial Autor (?) |
|
also while (true) ist eine schleife, die nur endet, wenn break ausgeführt wird. (?)
Zitat: Die Ausgabe nicht in den Methoden Plus und Minus...Codewiederholung! meinst du das so? http://pastebin.com/A67fsvR7 (Die Seite gefällt mir ^^)
________________________________________ Pc: http://www.sysprofile.de/id146539 Phobie vor langen Wörtern: Hippopotomonstrosesquippedaliophobie
|
 |
|
| |
|
xero
|
| Titel: if verzweigung geht nicht |
21.01.2011 16:58 |
|
|
Anmeldungsdatum: 04.09.2006
Beiträge: 450
 |
Tutorial Autor (?) |
|
Der Code wird immer besser. ^^
Endlosschleifen sind auch nicht besonders hübsch und machen imho nur sehr selten Sinn. Besonders hier kann man sehr gut eine reale Kondition verwenden. z.B. solange schleifen bis die Eingabe "ende" ist.
mfg
|
 |
|
| |
|
|
|
|