PCMasters Hardware Forum > Software > GFX, Webdesign und Programmierung > Seite 8 > [C++] Teilen durch 0 Frage

Im PC Forum registrieren


Produktsuche
IDEALO-PRODUKT-SUCHE
idealo preisvergleich
PCM News & Reviews
Antwort
 
 
Alt 28.02.2010, 22:57
Benutzerbild von KillaMarci
Threadersteller
KillaMarci
 
Standard

[C++] Teilen durch 0 Frage



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;
    case 4:
        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)
        {
                     case 0:
                          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
Alt Heute
Hardware Bot
Computer Informationen
 
Diese Werbung wird registrierten
Mitgliedern nicht angezeigt.
Werden Sie noch heute kostenlos Mitglied
auf PCMasters.de
Standard Weitere Informationen

 
Alt 01.03.2010, 00:09
pixelflat
 
Standard

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.

Geändert von pixelflat (01.03.2010 um 00:12 Uhr).
 
Alt 01.03.2010, 19:23
Benutzerbild von Saja
Saja
 
Standard

ich würde das mit einer do-while schleife abfangen

do
{
blah;
}
while(!zahlb); // zahlb==0
hardware forum Neue Frage stellen?
Kurze Zusammenfassung der Frage:
Bitte wählen Sie eine Kategorie:
Mailadresse:
Ihre Frage:
Ihre Frage wird als Gast gespeichert. Sollte eine Antwort im Forum erfolgen, bekommen Sie diese per Email zugeschickt.


Zufällige Frage
Um auf dieses Thema zu ANTWORTEN
bitte sich zuerst » hier kostenlos registrieren!!

Antwort

Tags: ,

Ähnliche Tags: , , ,


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Audio anlage, Digital oder Kabel? Adraxa Consumer Electronics 8 02.02.2010 16:53
URL/resource & Fonts(x-height) frage pink87 Internet und Netzwerke 4 17.12.2009 11:03
Frage zur Programmlöschung der 2. Festplatte MrPresident75 Festplatten und optische Laufwerke 2 11.12.2009 18:55
Frage zu CD's und Frage zu externen Festplatten. Shibosha Hardware Allgemein 4 14.09.2009 13:32
Grafikkarte Radeon 9250 PCI faloallaknap Grafikkarten 10 09.01.2008 11:47


Sie betrachten gerade: [C++] Teilen durch 0 Frage


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.



Im PC Forum registrieren