[C++] Teilen durch 0 Frage

KillaMarci

New member
Hi,
Ich poste erstmal den gesammten Programmcode und schildere dann unten meine Frage:
Code:
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <windows.h>


using namespace std;

int main (int argc, char *argv[])
{
    int rechart,zahla,zahlb;
    printf("\nMenue zur Berechnung");
    printf("\n1.Addition");
    printf("\n2.Subtraktion");
    printf("\n3.Multiplikation");
    printf("\n4.Division");
    printf("\n\n5.Programm Beenden");
    printf("\n\n\nBitte waehlen Sie eine Rechenart:  ");
    cin >> rechart;
    
        switch(rechart)
    {
    case 1:
        printf("\n\nSie muessen nun 2 Zahlen eingeben");
        printf("\nGeben Sie nun ihre erste Zahl ein: ");
        cin >> zahla;
        printf("\nGeben Sie nun ihre zweite Zahl ein: ");
        cin >> zahlb;
        printf("\nRechnung: %i + %i = %i",zahla,zahlb,zahla+zahlb);
        break;
    case 2:
        printf("\n\nSie muessen nun 2 Zahlen eingeben");
        printf("\nGeben Sie nun ihre erste Zahl ein: ");
        cin >> zahla;
        printf("\nGeben Sie nun ihre zweite Zahl ein: ");
        cin >> zahlb;
        printf("\nRechnung: %i - %i = %i",zahla,zahlb,zahla-zahlb);
        break;
    case 3:
        printf("\n\nSie muessen nun 2 Zahlen eingeben");
        printf("\nGeben Sie nun ihre erste Zahl ein: ");
        cin >> zahla;
        printf("\nGeben Sie nun ihre zweite Zahl ein: ");
        cin >> zahlb;
        printf("\nRechnung: %i * %i = %i",zahla,zahlb,zahla*zahlb);
        break;
    [COLOR="DarkGreen"][B]case 4:[/B][/COLOR]
        printf("\n\nSie muessen nun 2 Zahlen eingeben");
        printf("\nGeben Sie nun ihre erste Zahl ein: ");
        cin >> zahla;
        printf("\nGeben Sie nun ihre zweite Zahl ein: ");
        cin >> zahlb;

        switch(zahlb)
        {
                     [COLOR="Red"][B]case 0:[/B][/COLOR]
                          printf("\nSie koennen nicht durch Null teilen!");
                          printf("\nBitte geben sie eine andere zweite Zahl ein(nicht 0): ");
                          cin >> zahlb;
                          printf("\nRechnung: %i : %i = %i",zahla,zahlb,zahla/zahlb);
                          break;
                     default:
                          printf("\nRechnung: %i : %i = %i",zahla,zahlb,zahla/zahlb);
                          break;
                          
        }
        break;
    case 5:
         printf("Druecken Sie eine Taste um das Programm zu beenden");
         break;
    }
    
    
    getch();
    return 0;
}

Aaalso:
Es geht um case 0: (rot markiert), welcher sich in case 4 (grün markiert) befindet.
Case 0 fordert den Benutzer ja zur erneuten Eingabe einer Zahl ein, falls die davor eingegebene Zahl eine 0 war. Wenn er jetzt aber bei der zweiten Frage wiederum eine 0 eingibt(obwohl er das ja eigentlich nicht soll, kann aber ja vorkommen) stürzt das Programm ab (ist ja auch klar warum)

Nun meine Frage: Wie kann ich es hinkriegen, dass der Benutzer immer und immer wieder aufgefordert wird eine neue Zahl einzugeben, wenn die vorherige eine 0 war, ohne dass ich das gleiche immer und immer wieder in Case 0 schreiben muss? 😕

Ich denke mal, dass ganze kann man mit irgendeiner Schleife lösen..kenne mich aber mit Schleifen nicht besonders gut aus, und bräuchte da mal ein wenig Hilfe.

Hoffe die Frage war soweit verständlich (ist ein wenig kompliziert auszudrücken)

Gruß,
KillaMarci
 
Du hast da einiges an Redundanz drin. Ich würds zB etwa so machen:

Code:
...
int zahla = 0, zahlb = 0, rechart;
// Eingabe Rechenart (rechart)

cout << "Erste Zahl: ";
cin >> zahla;
cout << "Zweite Zahl: ";
cin >> zahlb;

switch(rechart)
{
 case 1: cout << "Ergebnis: " << zahla + zahlb << endl; break;
 case 2: cout << "Ergebnis: " << zahla - zahlb << endl; break;
 case 3: cout << "Ergebnis: " << zahla * zahlb << endl; break;
 case 4:
  while(zahlb == 0) { cin << zahlb; }
  cout << "Ergebnis: " << zahla / zahlb << endl; break;
 default: cout << "Falsche Eingabe" << endl;
}

In meinem Beispiel steht auch 4x "Ergebnis". Das könnte man auch vorher nur ein mal ausgeben. Dann stellt sich aber die Frage was man bei "default" ausgibt, bzw. ob mans weglassen kann.

Du solltest bei C++ (cin, cout) für Ein- & Ausgabe verwenden. printf() gehört zu C (stdio). Eine Switch-Case Anweisung ist eigentlich auch nur bei mehrfachen Auswahlmöglichkeiten praktisch, wo if-else Verschachtelungen unübersichtlich wären. Wenns nur 2 Möglichkeiten gibt, wäre imho if-else besser.
 
Zuletzt bearbeitet:

Online-Statistiken

Zurzeit aktive Mitglieder
2
Zurzeit aktive Gäste
32
Besucher gesamt
34

Beliebte Forum-Themen

Zurück
Oben Unten