Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.05.2012, 20:51

Taschenrechner Programm endlos Schleife

Hallo
Ich habe mir heute versucht einen kleinen Taschenrechner zu Programmieren. Mit den ganzen Rechenzeichen und Ergebnissen funktioniert auch alles gut aber ich wollte noch einbauen, dass wenn man 'b' drückt das Spiel abgebrochen wird. Also es wird in einer Schleife die Rechnung so lange durchgeführt bis man durch 'b' abbricht. Aber immer wenn ich dann das Spiel abbrechen will läuft einfach nur die Schleife endlos weiter ohne das man noch was eingeben kann. Was hab ich falsch gemacht, kann mir einer bitte helfen? Hier der Quelltext:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Taschenrechner Programm
//
#include <iostream>

using namespace std;

int main ()
{
    // Variablen
    //
    char chOperator = 'f';
    int ErsteZahl, ZweiteZahl = 0;
    int Ergebnis = 0;

    // Info
    cout << "Dieses Programm ist ein Taschenrechner den man durch die Eingabe von b oder B beenden kann" << endl;

    // Schleife für Taschenrechner
    while (chOperator != 'b' && chOperator != 'B')
    {
        // Zahlen und Operator abfragen
        cout << "\nEine Zahl eingeben: ";
        cin >> ErsteZahl;

        cout << "Rechnungszeichen eingeben also (+, *, -, /) oder zum beenden b: ";
        cin >> chOperator;

        cout << "Zweite Zahl eingeben: ";
        cin >> ZweiteZahl;

        // Rechnung
        switch (chOperator)
        {
            // Plus?
            case ('+'):
            {
                Ergebnis = ErsteZahl + ZweiteZahl;
            }   break;

            // Minus?
            case ('-'):
            {
                Ergebnis = ErsteZahl - ZweiteZahl;
            }   break;
            
            // Mal?
            case ('*'):
            {
                Ergebnis = ErsteZahl * ZweiteZahl;
            }   break;

            // Geteilt?
            case ('/'):
            {
                Ergebnis = ErsteZahl / ZweiteZahl;
            }   break;

            // Abbruch?
            case ('b'):
            {
                chOperator = 'b';
            }   break;

        }   // switch Schleife

        // Ergebnis ausgeben
        cout << "Ergebnis ist: " << Ergebnis << endl;

    }   // while Schleife

    return 0;
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

10.05.2012, 21:03

Du hast in der Schleifenbedingung mit && abgefragt. Das heisst es müssen beide Seiten gelten. In deinem Fall muss die Variable gleich 'b' sein und gleich 'B'. Beides kann sie natürlich nicht sein. Du musst in diesem Fall ein oder benutzen. Also gleich 'b' || gleich 'B'.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

10.05.2012, 21:22

Zitat

Du hast in der Schleifenbedingung mit && abgefragt.

Was hier absolut richtig ist.
Er hat ein != und kein ==.

Ich habe vorhin kurz dürbergeschaut und keinen Fehler gefunden.
Ich würde dir raten, mal das mit dem Debugger zu prüfen.
Endlosschleife kann nämlich eigentlich nicht sein.

Was mir noch ein bisschen komisch vorkommt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
switch (chOperator)
{
    ... 
    case ('b'):
    {
        chOperator = 'b';
    } break;
}

Wenn chOperator gleich "b" ist, dann setzt du ihn auf "b".
Das ist sinnlos. ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (10.05.2012, 22:07)


4

10.05.2012, 21:29

Ja da hab ich nur was ausprobiert weil ich dachte vllt geht es ja so :D Hab davor aber auch was anderes stehen gehabt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

10.05.2012, 22:00

Stimmt natürlich;)
Setz einfach mal einen Breakpoint in den case-Block für 'b' und guck ob dieser überhaupt erreicht wird.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Squareys

Frischling

Beiträge: 35

Wohnort: Konstanz

Beruf: VR Development Lead bei Vhite Rabbit.

  • Private Nachricht senden

6

11.05.2012, 08:09

Das Programm wird im Augenblick nur durch klein-'b' beendet.
Auch wird es beim Beenden noch einmal das letzte Ergebnis anzeigen.
Vielleicht willst du auch noch ein default einbauen, das könnte vielleicht
weiterhelfen den Fehler zu finden.

Ansonsten sollte das eigentlich funktionieren ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

11.05.2012, 08:13

Wenn du noch nicht lange programmierst und der Debugger dich noch überfordert, kannst du einfach mal in jeden case-Block eine Ausgabe einbauen. Dann zusätzlich wie schon vorgeschlagen einen default-Block mit hinzunehmen und dann solltest du eigentlich das Problem finden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

11.05.2012, 16:19

Habe den Fehler jetzt gefunden :dash: Ich habe das b bei der Abfrage der ersten Zahl eingegeben und nicht beim Operator :D

Werbeanzeige