HomeArtikelDownloadsForum
PCFreunde.deForumEntwicklungC++, C
Besucher online: 546
Schnellsuche

Anzeigen

Community

Foren
C++, C Seite 1/1
if verzweigung geht nicht
AntwortenNeues ThemaZur akzeptierten AntwortZur Themenliste
Seiten:
1
Nachricht
MadBonsaiJr
Titel: if verzweigung geht nicht 18.01.2011 19:47
1.522 Punkte (?)
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 :evil:

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
Private Nachricht senden  
 
locked_User0033
Titel: if verzweigung geht nicht 18.01.2011 20:14
55 Punkte (?)
[Gesperrt]
 
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]
Private Nachricht senden  
 
xero
Titel: if verzweigung geht nicht 18.01.2011 20:14
1.953 Punkte (?)
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
Private Nachricht senden  
 
locked_User0033
Titel: if verzweigung geht nicht 18.01.2011 20:22
55 Punkte (?)
[Gesperrt]
 
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. ^^
Private Nachricht senden  
 
xero
Titel: if verzweigung geht nicht 18.01.2011 20:57
1.953 Punkte (?)
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
Private Nachricht senden  
 
MadBonsaiJr
Titel: if verzweigung geht nicht 19.01.2011 20:49
1.522 Punkte (?)
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 :oops: :wink:

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
Private Nachricht senden  
 
xero
Titel: if verzweigung geht nicht 19.01.2011 21:36
1.953 Punkte (?)
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
Private Nachricht senden  
 
MadBonsaiJr
Titel: if verzweigung geht nicht 20.01.2011 14:06
1.522 Punkte (?)
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
Private Nachricht senden  
 
xero
Titel: if verzweigung geht nicht 21.01.2011 16:58
1.953 Punkte (?)
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
Private Nachricht senden  
 
AntwortenNeues ThemaZur akzeptierten AntwortZur Themenliste
Seiten:
1
Community Login
eMail:
Passwort:
Auto-Login