Taschenrechner

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Taschenrechner

    Hallo,

    habe mal einen kleinen Taschenrechner in C++ programmiert und habe ein kleines Problem =)

    Ersteinmal der Code:

    Quellcode

    1. #include <iostream>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <cmath>
    5. #include <iomanip>
    6. using namespace std;
    7. long double calculate(int ausw, long double x, long double y); //deklaration der funktion 'calculate'
    8. long double prozent(int ausw, long double x, long double y);
    9. int main()
    10. {
    11. int auswahl; //deklaration der Variablen für die Funktion 'main'
    12. long double a = 0.0;
    13. long double b = 0.0;
    14. long double ergebnis = 0.0;
    15. char antwort;
    16. do //Schleife fürs Auswahl-Menü die nur solange gilt
    17. { //wie die Antwort gleich 'j' ist
    18. cout << "Calculator v0.9_RC_1\n" << endl;
    19. cout << "|==============|\n\n";
    20. cout << "[1]Addition\n"<<
    21. "[2]Subtraktion\n"<< //Auswahl-Menü
    22. "[3]Multiplikation\n"<<
    23. "[4]Division\n"<<
    24. "[5]Quadrieren\n"<<
    25. "[6]Wurzel ziehen\n"<<
    26. "[7]Prozentrechnung\n"<<
    27. "[0]Beenden\n\n";
    28. cout << "Waehlen sie eine Option aus: ";
    29. cin >> auswahl; //Einlesen der Menü-Auswahl
    30. if( auswahl == 0 ) //Programm beenden wenn 0 gewählt wird
    31. return 0;
    32. system("cls"); //Bildschirminhalt löschen
    33. cout << "Kommazahlen muessen mit einem Punkt statt eines Kommas eingegeben werden!\n\n";
    34. if ( auswahl >= 1 && auswahl <= 4 )
    35. {
    36. cout << "\n1.Zahl: "; //Erste Zahl einlesen
    37. cin >> a;
    38. cout << "\n2.Zahl: ";
    39. cin >> b; //Zweite Zahl einlesen
    40. }
    41. else if( auswahl >= 5 && auswahl <= 6 )
    42. {
    43. cout << "\nBasis: "; //Basis einlesen
    44. cin >> a;
    45. cout << "\nExponent: "; //Exponent einlesen
    46. cin >> b;
    47. }
    48. else if( auswahl == 7 ) //Werte für Prozentrechnung einlesen
    49. {
    50. cout << "bla";
    51. }
    52. /*if (int auswahl == char auswahl)
    53. {
    54. cout << "Falscher Eingabewert!";
    55. }*/
    56. ergebnis = calculate(auswahl, a, b);
    57. cout << "\nDas Ergebnis lautet: " << setprecision(2) << fixed << ergebnis;
    58. cout << "\n\nWollen sie eine weitere Berechnung durchfuehren?\n";
    59. cout << "<J/N>"; //Abfrage ob weitergerechnet werden soll oder nicht
    60. cin >> antwort;
    61. while( antwort != 'j' && antwort != 'n' )
    62. {
    63. cout << "Falsche Eingabe, wiederholen: "; //Fehlerabfang falls Zahl anstatt Buchstabe eingegeben wird
    64. cin >> antwort;
    65. }
    66. system("cls"); //Bildschirminhalt löschen
    67. }while (antwort == 'j' ); //Bedingung der Do-While-Schleife
    68. return 0;
    69. }
    70. long double calculate (int ausw,long double x,long double y) //Funktion zum berechnen der einzelnen Werte
    71. {
    72. long double res = 0.0; //Definition des Ergebnis-Wertes
    73. switch(ausw) //Switch-Anweisung für Menü-Auswahl
    74. {
    75. case 1 : //Berechnung zur Addition
    76. {
    77. res = x + y;
    78. break;
    79. }
    80. case 2 : //Berechnung zur Subatraktion
    81. {
    82. res = x - y;
    83. break;
    84. }
    85. case 3 : //Berechnung zur Multiplikation
    86. {
    87. res = x * y;
    88. break;
    89. }
    90. case 4 : //Berechnung zur Division
    91. {
    92. res = x / y;
    93. if (y == 0) //Fehlerabfang falls durch 0 dividiert wird
    94. {
    95. cout << "\nDivision durch 0 nicht moeglich!";
    96. }
    97. break;
    98. }
    99. case 5 :
    100. {
    101. res = pow (x, y); //Berechnung zu Potenzierung
    102. break;
    103. }
    104. case 6 :
    105. {
    106. res = pow(x, 1.0 / y); //Berechnung zur Wurzelziehung
    107. break;
    108. }
    109. default : cout<<"Falsche Eingabeparameter!"; //Falsche Auswahl
    110. break;
    111. }
    112. return res;
    113. }
    114. long double prozent(int ausw, long double x, long double y) //Muss noch bearbeitet werden (Funktioniert nicht)
    115. {
    116. long double res = 0.0;
    117. switch(ausw)
    118. {
    119. case 7 :
    120. {
    121. res = x * y / 100;
    122. cout << "\n" << res;
    123. break;
    124. }
    125. }
    126. return res;
    127. }
    Alles anzeigen


    Wenn ich nun bei der Menüauswahl eine auswahl einlesen will und ein Buchstabe eingelesen wird, statt einer Zahl, läuft das Programm in einer Endlosschleife und spuckt halt immer"Falsche Eingabe, wiederholen" aus.Ich glaube es liegt an der Schleife.

    Quellcode

    1. while( antwort != 'j' && antwort != 'n' )
    Bitte um eine kleine Hilfe.



    PS:Nicht erscrehcken bei dem Code da sind noch ein paar "tote" Teile drin die ich noch bearbeiten will.

    Schonmal Danke im Vorraus!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von stack ()

  • Hm deine Variante hab ich nicht ganz verstanden..habe nun etwas anderes gefunden was zwar funktioniert aber naja danach keine Rechnen-Operation mehr möglich ist:

    Quellcode

    1. do //Schleife fürs Auswahl-Menü die nur solange gilt
    2. { //wie die Antwort gleich 'j' ist
    3. cout << "Calculator v0.9_RC_1\n" << endl;
    4. cout << "|==============|\n\n";
    5. cout << "[1]Addition\n"<<
    6. "[2]Subtraktion\n"<< //Auswahl-Menü
    7. "[3]Multiplikation\n"<<
    8. "[4]Division\n"<<
    9. "[5]Quadrieren\n"<<
    10. "[6]Wurzel ziehen\n"<<
    11. "[7]Prozentrechnung\n"<<
    12. "[0]Beenden\n\n";
    13. cout << "Waehlen sie eine Option aus: ";
    14. cin >> auswahl; //Einlesen der Menü-Auswahl
    15. while (!(cin >> auswahl))
    16. {
    17. cout << "Falsche Eingabe du Heinz!";
    18. cin.clear();
    19. cin.ignore(10000, '\n');
    20. cout << "\n\nNeuer Versuch: ";
    21. cin >> auswahl;
    22. }
    Alles anzeigen


    Hab ich es vielleicht nur an die falsche Stelle gesetzt?`

    Trotzdem Danke für deinen Tipp!
  • Wenn ich es dort einsetze gilt es doch schon garnichtmehr für die Menü-Auswahl, dann gilt es doch schon dafür ob eine weitere Berechnung durchgeführt werden soll oder eben nicht?Normalerweise müsste doch direkt nach dem einlesen des Wertes für die Menü-Auswahl eine Kontrolle stattfinden und nicht erst wenn ich in einem Menü bin und eine Berechnung durchgeführt habe.