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

21

28.11.2007, 22:01

Soo ein kleiner Erfolg: :)
Jetzt wird das Programm tatsächlich beendet wenn ich 4 drücke...
der rest ist doch noch unverändert :(

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
Einfaches Rechenprogramm 
C++ für Spieleprogrammierer
*/

#include <iostream>
using namespace std;

//Hauptprogramm

int main ()
{
    //Variablen

    float plus1 = 0.1f;
    float plus2 = 0.1f;
    float Gesamtpunkteplus = 0.1f;
    float minus1 = 0.2f;
    float minus2 = 0.2f;
    float Gesamtpunkteminus = 0.2f;
    float mal1 = 0.3f;
    float mal2 = 0.3f;
    float Gesamtpunktemal;
    float geteilt1 = 0.4f;
    float geteilt2 = 0.4f;
    float Gesamtpunktegeteilt = 0.4f;
    int befehl = 0;
    int rechnen = 0;


    while (befehl != 4)
    {
    //Anfangsbildschirm

    cout << "Willkommen bei dem Rechenprogramm!\n1: Rechenvorgang starten\n2: Verfuegbare Befehle anzeigen\n3: Informationen anzeigen\n4: Programm beenden\n";
    cin >> befehl;
    //help Befehl

    if (befehl == '2')
    {
        cout << "\nHILFE: \n1: Rechenvorgang starten\n2: Verfuegbare Befehle anzeigen\n3: Informationen anzeigen\n4: Programm beenden\n";
        cin >> befehl;
    }
    //info Befehl

    if (befehl == '3')
    {
         cout << "INFO: \n(c) by Uwe Collmer\nThanks for downloading and using\nVersion 0.5\nMade in about 3 hours\n";
         cin >> befehl;
    } 
    //Ausgabe der Rechenmöglichkeiten

    if (befehl == '1')
    {
        cout << "Wollen Sie\n1: addieren\n2: subtrahieren\n3: multiplizieren\n4: dividieren: ";
        cin >> rechnen;
    }
    //Addition

    if (rechnen == '1')
    {
        cout << "Bitte die erste Zahl fuer das Additionsverfahren angeben: ";
        cin >> plus1;
        cout << "Bitte die zweite Zahl fuer das Additionsverfahren angeben: ";
        cin >> plus2;
        //Berechnung der Gesamtpunktezahl:

        Gesamtpunkteplus = plus1 + plus2;
        cout << "Gesamtergebnis: " << Gesamtpunkteplus << endl;
    }
    //Subtraktion

    if (rechnen == '2')
    {
        cout << "Bitte die erste Zahl fuer das Subtraktionsverfahren eingeben: ";
        cin >> minus1;
        cout << "Bitte die zweite Zahl fuer das Subtraktionsverfahren eingeben: ";
        cin >> minus2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunkteminus = minus1 - minus2;
        cout << "Gesamtergebnis: " << Gesamtpunkteminus << endl;
    }
    //Multiplikation

    if (rechnen == '3')
    {
        cout << "Bitte die erste Zahl fuer das Multiplikationsverfahren eingeben: ";
        cin >> mal1;
        cout << "Bitte die zweite Zahl fuer das Multiplikationsverfahren eingeben: ";
        cin >> mal2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunktemal = mal1 * mal2;
        cout << "Gesamtergebnis: " << Gesamtpunktemal << endl;
    }
    //Division

    if (rechnen == '4')
    {
        cout << "Bitte die erste Zahl fuer das Divisionsverfahren eingeben: ";
        cin >> geteilt1;
        cout << "Bitte die zweite Zahl fuer das Divisionsverfahren eingeben: ";
        cin >> geteilt2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunktegeteilt = geteilt1 / geteilt2;
        cout << "Gesamtergebnis: " << Gesamtpunktegeteilt << endl;
    } 


    }   




            return 0;
}


?!?!? Ich blick jetzt gar nicht mehr durch... :(

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

22

28.11.2007, 22:12

Das wäre schon mal ratsam, weil auswahl völlig sinlos ist.
Dann solltest du auch wirklich Integer Variablen abfragen.
D.h. if(befehl = 2) und nicht if(befehl = '2')

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

23

29.11.2007, 08:00

Hallo Fred,
das ist flasch mit deiner Abfrage.

Eine Signatur aus resourcecode.de zeigt es gut...

C-/C++-Quelltext

1
= != ==


Kurz um = ist zur zuweisung und == zum vergleichen ;)

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

24

29.11.2007, 14:17

ja sry, schon klar. Mist...^^

25

29.11.2007, 14:50

? Wie muss ich das jetzt machen???

//edit:
JUHUUU
es läuft! Vielen Dank @ all
Es lag an den ' bei den if befehlen!

Noch ein frage:
wie mach ich da jetzt einen else Befehl rein, dass bei falscher eingabe, oder ausversehlicher druck auf ein buchstabe das ganze fenster nicht nach unten rattert, sondern eine meldung kommt und man seine auswahl wieder treffen kann?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

26

29.11.2007, 18:17

das mit dem Buchstaben eingeben ist so ein typisches Problem... es passiert ca. folgendes:

std::cin stellt fest, dass die Eingabe nicht mit der übergebenen Variable (int) kompatibel ist.
-> std::cin setzt seinen eigenen Status auf 'Fehler' und lässt alle Nutzereingaben im Input liegen

-> man muss also um ordentlich weiter zu arbeiten zuerst den Fehlerstatus entfernen und dann den inkompatiblen Input entfernen, nur so kann man wieder korrekt weiter arbeiten.

C-/C++-Quelltext

1
2
3
4
5
6
7
int zahl;
std::cin >> zahl; // falls der Nutzer etwas anderes als eine Zahl eingibt entsteht ein Fehler

if (! std::cin ) // prüfen, ob std::cin in Ordnung ist oder einen Fehler meldet

{
  std::cin.clear(); // Fehlerstatus entfernen

  std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // fehlerhaften Input ignorieren

}

27

29.11.2007, 19:07

kannste den Code mal bitte in mein Quellcode eintragen?
Ich verstehe einfach nicht wie ich das machen muss...
thx

außerdem habe ich noch ein anderes Problem:
Wenn ich ein rechenvorgang ausfürhre und ihn beende und ich dann info oder so abfragen will, kommt er mir nochmal mit einem Rechenvorgang!?
Wie das?
Wie kann ich das beheben?
Screen:


(Link)


Hier wie gewohnt der quellcode:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
Einfaches Rechenprogramm 
C++ für Spieleprogrammierer
*/

#include <iostream>
using namespace std;

//Hauptprogramm

int main ()
{
    //Variablen

    float plus1 = 0.1f;
    float plus2 = 0.1f;
    float Gesamtpunkteplus = 0.1f;
    float minus1 = 0.2f;
    float minus2 = 0.2f;
    float Gesamtpunkteminus = 0.2f;
    float mal1 = 0.3f;
    float mal2 = 0.3f;
    float Gesamtpunktemal;
    float geteilt1 = 0.4f;
    float geteilt2 = 0.4f;
    float Gesamtpunktegeteilt = 0.4f;
    int befehlauswahl = 0;
    int befehl = 0;
    int rechnen = 0;
    char close;



    //Anfangsbildschirm

    cout << "Willkommen bei dem Rechenprogramm!\n1: Rechenvorgang starten\n2: Hilfe anzeigen\n3: Informationen anzeigen\n4: Programm beenden\n_____________________________\n";

    while (close != 'y')
    {
    
        //Anfangsbildschirm

        cout << "\nBitte einen Befehl eingeben: ";
        cin >> befehlauswahl; 
        cout << "\n";
    //help Befehl

     if (befehlauswahl == 2)
    {
        cout << "\nHILFE: \n1: Rechenvorgang starten\n2: Hilfe anzeigen\n3: Informationen anzeigen \n4: Programm beenden\n\n   Bitte bei den Rechnungen die Dezimalzahlen MIT einem Punkt\n   und KEINEM Komma trennen!\n";
    }
    //info Befehl

     if (befehlauswahl == 3)
    {
         cout << "INFO: \n(c) by Uwe Collmer\nhttp://uwe-collmer.de\nhttp://game-community.org\n\nThanks for downloading and using\nVersion 0.9\nMade in about 4 hours\n(Il)legal copys are allowed\n\nPlease send bugreports or questions to uwe@collmer.net\n";
    } 


    //Ausgabe der Rechenmöglichkeiten

    if (befehlauswahl == 1)
    {
        cout << "\nWollen Sie\n1: addieren\n2: subtrahieren\n3: multiplizieren\n4: dividieren: \n";
        cin >> rechnen;
    }
    //Addition

     if (rechnen == 1)
    {
        cout << "\nBitte die erste Zahl fuer das Additionsverfahren angeben: ";
        cin >> plus1;
        cout << "Bitte die zweite Zahl fuer das Additionsverfahren angeben: ";
        cin >> plus2;
        //Berechnung der Gesamtpunktezahl:

        Gesamtpunkteplus = plus1 + plus2;
        cout << "\nGesamtergebnis: " << Gesamtpunkteplus << "\n_____________________________" << endl;
    }
    //Subtraktion

     if (rechnen == 2)
    {
        cout << "\nBitte die erste Zahl fuer das Subtraktionsverfahren eingeben: ";
        cin >> minus1;
        cout << "Bitte die zweite Zahl fuer das Subtraktionsverfahren eingeben: ";
        cin >> minus2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunkteminus = minus1 - minus2;
        cout << "\nGesamtergebnis: " << Gesamtpunkteminus << "\n_____________________________" << endl;
    }
    //Multiplikation

     if (rechnen == 3)
    {
        cout << "\nBitte die erste Zahl fuer das Multiplikationsverfahren eingeben: ";
        cin >> mal1;
        cout << "Bitte die zweite Zahl fuer das Multiplikationsverfahren eingeben: ";
        cin >> mal2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunktemal = mal1 * mal2;
        cout << "\nGesamtergebnis: " << Gesamtpunktemal << "\n_____________________________" <<  endl;
    }
    //Division

     if (rechnen == 4)
    {
        cout << "\nBitte die erste Zahl fuer das Divisionsverfahren eingeben: ";
        cin >> geteilt1;
        cout << "Bitte die zweite Zahl fuer das Divisionsverfahren eingeben: ";
        cin >> geteilt2;
        //Berechnung Gesamtpunktezahl

        Gesamtpunktegeteilt = geteilt1 / geteilt2;
        cout << "\nGesamtergebnis: " << Gesamtpunktegeteilt << "\n_____________________________" << endl;
    } 

        //exit Befehl

     if (befehlauswahl == 4)
     {
         cout << "Really exit? (y/n)\n";
         cin >> close;
     }
     //bei n

     if (close == 'n')
     {
         cout << "\nGerade noch Glueck gehabt und doch nicht beendet ;-)\n1: Rechenvorgang starten\n2: Hilfe anzeigen\n3: Informationen anzeigen\n4: Programm beenden\n";
         
     }
     
    }   




            return 0;
}


Danke
LG

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

28

29.11.2007, 19:45

Zuerst mal: ich baue garnix in deinen Quellcode ein, aber du darfst es selbst tun und das sollte auch kein Problem darstellen, wenn du erstmal verstanden hast, woher solche Fehler in std::cin kommen und wie du sie behebst.

Ich kann dein anderes Problem im Quelltext seehr gut nachvollziehen.

Da ich nicht einsehe, warum ich dir nochmal eine Lösung geben soll, nachdem ich das schonmal gemacht hab (siehe if - else if - else) hier stattdessen eine kleine Einführung in den Debugger (der hilft dir, zu verstehen, warum die 'rechnen'-Abfrage statt dem Menu kommt)

-> Drücke F10, drücke wieder F10 usw. wann immer du willst kannst du indem du die Maus über eine Variable im Quelltext hältst ihren momentanen Wert anzeigen lassen.

Wenn du jetzt mal die Werte von rechnen und befehlauswahl aufmerksam verfolgst wirst du die Ursache des Phänomens ermitteln können.

Solltest du irgendwann mal das Programm nicht von Anfang bis Ende durchgehen wollen kannst du einfach einen so genannten Breakpoint an der stelle einsetzen, wi dein Programm anhalten soll.

29

29.11.2007, 21:47

ja schon, danke
aber ich bin noch nicht soweit, das alles zu verstehen.
Ich denke ich werde es besser verstehen, wenn ich jetzt mal ein quellcode von einem 100% programm sehen zu können.

ich verstehe nur nicht wie ich std::cin einbinden soll?
Wo kommt was hin.. muss ich irgendwo noch eine Variable setzten, einen Wert ändern?

lg

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

30

29.11.2007, 22:52

oook, ich code mal fix was zusammen (nich haun wegen Style etc) :lol:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <limits>

int main()
{
  float calc1 = 0.0f, calc2 = 0.0f; // Berechnungsvariablen

  int userchoice = 0, userchoice2 = 0; // Menuvariable;


  while (userchoice != 4)
  {
    std::cout << "\nSimpler Rechner\n\n (1) Rechnen\n (2) Hilfe\n (3) Credits\n (4) Beenden\n\n";
    std::cin >> userchoice; // Nutzereingabe

    while (! std::cin ) // Nutzereingabe wiederholen, wenn sie nicht korrekt war

    {
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      std::cout << "\nNur 1, 2, 3 und 4 sind gültige Eingaben!\n";
      std::cin >> userchoice;
    }

    if (userchoice == 1) // Rechnen

    {
      std::cout << "\n (1) Addieren\n (2) Subtrahieren\n"; // 3 und 4 lass ich weg, weil es fürs Prinzip egal ist.

      std::cin >> userchoice2;
      while (! std::cin ) // Nutzereingabe wiederholen, wenn sie nicht korrekt war

      {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "\nNur 1 und 2 sind gültige Eingaben!\n";
        std::cin >> userchoice2;
      }
      if (userchoice2 == 1) // Addieren

      {
        std::cout << "\nAddieren:";
        std::cout << "\n Zahl1 = ";
        std::cin >> calc1;
        std::cout << "\n Zahl2 = ";
        std::cin >> calc2;
        while (! std::cin)
        {
          std::cin.clear();
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
          std::cout << "\nNur Dezimalzahlen (Trennzeichen '.') sind gültige Eingaben!\n";
          std::cout << "\n Zahl1 = ";
          std::cin >> calc1;
          std::cout << "\n Zahl2 = ";
          std::cin >> calc2;
        }
        std::cout << "\nErgebnis: " << (calc1 + calc2);
      }
      else if (userchoice2 == 2) // Subtrahieren

      {
        std::cout << "\nSubtrahieren:";
        std::cout << "\n Zahl1 = ";
        std::cin >> calc1;
        std::cout << "\n Zahl2 = ";
        std::cin >> calc2;
        while (! std::cin)
        {
          std::cin.clear();
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
          std::cout << "\nNur Dezimalzahlen (Trennzeichen '.') sind gültige Eingaben!\n";
          std::cout << "\n Zahl1 = ";
          std::cin >> calc1;
          std::cout << "\n Zahl2 = ";
          std::cin >> calc2;
        }
        std::cout << "\nErgebnis: " << (calc1 - calc2);
      }
      else // Ungültige Eingabe!

      {
        std::cout << "Ungültige Eingabe!\n";
      }
    }
    else if (userchoice == 2) // Hilfe

    {
      std::cout << "\nHilf dir selbst!\n"; // klar ;)

    }
    else if (userchoice == 3) // Credits

    {
      std::cout << "\n--Text hier--\n";
    }
    else if (userchoice != 4) // Ungültige Eingabe!

    {
      std::cout << "Ungültige Eingabe!\n";
    }
  }
  return 0;
}



Keine Garantie auf Fehlerfreiheit, ich hab das direkt hier im Forum zusammengeschrieben und nicht getestet ;)

Werbeanzeige