Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Falscher Quelltext Taschenrechner

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.01.2008, 17:27 Uhr
Djbetty



Wir haben in der Schule diesen Quellcode erhalten, und sollen aus diesem alle Fehler finden, so dass das Programm am Ende läuft.

Einige Fehler habe ich schon gefunden, kann mir jemand helfen, wo hat es hier noch fehler?

Es soll am Schluss Eine Art Taschenrechner sein.

Zuerst kann man die Rechenart bestimmen (+ - : *) und dann zwei Zahlen eingeben, die in der folge gemäss gewählter Rechenart miteinander verrechnet werden.

Danke für eure Hilfe

Her der Quelltext:

C++:
#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

/* Prototypen der Funktionen*/
int addition(int a, int b);
int subtraktion(int a, int b);
int multiplikation(int a, int b);
double division(int a, int b); //Nicht Ganzzahl!

/*Die Hauptfunktion*/
int main ()
{

/*Variable, die in main() verwendet werden*/
int erste, zweite, wahl;
int resultat;

/*Eingabeaufforderungen*/
cout << "Waehlen Sie, was mit den zwei Zahlen geschehen soll,"<< endl;
cout << "die Sie nachher eingeben:" << endl;
cout << "1 addieren\n2 subtrahieren\n3 multiplizieren\n4 dividieren";
cout << endl << endl;
cin >> wahl;
cout << "\n\nErste Zahl:\t" << endl;
cin >> erste;
cout << "Zweite Zahl:\t" << endl;
cin >> zweite;

/*Auswahl der Funktion (Unterprogramm)*/
switch (erste)
{
case '1':
resultat = (erste+zweite);
break;
case '2':
resultat = (erste-zweite);
break;
case '3':
resultat = (erste*zweite);
break;
case '4':
resultat = (erste/zweite);
break;
}

/*Ausgabe*/
cout << "Ergebnis:\t" << resultat << endl << endl;
fflush stdin;
getchar();
return 0;

/*==========================================================================*/
/*Die Unterprogramme:
1 zum Addieren*/

int addition(int a, int b)
{
return a+b;
}

/*2 zum Subtrahieren*/
int subtraktion(int a,int b)
{
return a-b;
}

/*3 zum Multiplizieren*/
int multiplikation(int a,int b)
{
return a*b;
}

/*4 zum Dividieren*/
double division(int a,int b)
{
return a/b;
}



mod edit: BENUTZE CPP TAGS SELBER

Dieser Post wurde am 02.01.2008 um 18:32 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2008, 18:21 Uhr
xXx
Devil


01. Deine switch-case-Konstruktion bezieht sich auf die 1. Zahl anstelle der Gewählten Rechnart Das solltest du anpassen.
02.
C++:
fflush stdin;
Fehlen zwei Klammern

C++:
fflush(stdin);
Aber die Stelle, so darfst du deinem Tutor gerne berichten, ist undefiniertes Verhalten und darf gerne gestrichen werden.
03. Hinter return 0; fehlt ein }.
04. Wofür schreibst du denn die "Unterprogramme", die man auch einfach Funktionen nennt, wenn du sie nicht nutzt?
05. "Ergebnist" was ist das? Und ein Leerzeichen dahinter ist auch nicht falsch (evtl. auch ein Doppelpunkt)


C++:
#include <iostream>
// #include <cstdio> std::fflush kommt raus, d.h. nicht genutzt
// #include <cmath> nicht genutzt ...

using namespace std;

/* Prototypen der Funktionen*/
int addition(int a, int b);
int subtraktion(int a, int b);
int multiplikation(int a, int b);
double division(int a, int b);

/*Die Hauptfunktion*/
int main ()
{
    /*Variable, die in main() verwendet werden*/
    int erste, zweite, wahl;
    int resultat;

    /*Eingabeaufforderungen*/
    cout << "Waehlen Sie, was mit den zwei Zahlen geschehen soll,"<< endl;
    cout << "die Sie nachher eingeben:" << endl;
    cout << "1 addieren\n2 subtrahieren\n3 multiplizieren\n4 dividieren";
    cout << endl << endl;
    cin >> wahl;
    cout << "\n\nErste Zahlt" << endl;
    cin >> erste;
    cout << "Zweite Zahlt" << endl;
    cin >> zweite;

    /*Auswahl der Funktion */
    switch (wahl)
    {
        case '1':
            resultat = (erste+zweite);
            break;
        case '2':
            resultat = (erste-zweite);
            break;
        case '3':
            resultat = (erste*zweite);
            break;
        case '4':
            resultat = (erste/zweite);
            break;
    }

    /*Ausgabe*/
    cout << "Ergebnis: " << resultat << endl << endl;
    
    // return 0; muss nicht, kann aber stehen bleiben.
}

int addition(int a, int b)
{
    return (a + b);
}

int subtraktion(int a,int b)
{
    return (a - b);
}

int multiplikation(int a,int b)
{
    return (a * b);
}

double division(int a,int b)
{
    return (a / b);
}
statt std::fflush solltest du eher sowas nutzen:

C++:
std::istream& flush_stream(std::istream& in)
{ return in.clear(), in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }

Dabei geht man halt hin und setzt das fail&bad-bit des Streams zurück. Dann wird noch alles was im Buffer steht rausgeworfen bis zum nächsten Newline-Zeichen.


C++:
/*Ausgabe*/
    cout << "Ergebnis: " << resultat << endl << endl;
    flush_stream(std::cin).get();
    // return 0; muss nicht, kann aber stehen bleiben.
}
wäre dann der letzte Teil deines Programms anstelle von std::fflush
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2008, 20:35 Uhr
Bruder Leif
dances with systems
(Operator)


Ausserdem: Keine default-Anweisung im switch, keine Ueberpruefung der Eingabe bzw. des Status von cin, und using namespace ist boese...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.01.2008, 20:42 Uhr
0xdeadbeef
Gott
(Operator)


Seit wann machen wir hier eigentlich anderer Leute Hausaufgaben?


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: