OldSchoolHack

Register / Login English

Auch beim Taschenrechner gibt es Probleme!


icon Auch beim Taschenrechner gibt es Probleme! #1

Join Date: Jul 2012

Posts: 11

Morgen/Abend - egal.

Ich habe mich mal rangesetzt und einen Taschenrechner gecodet (nichts großes, aber jeder fängt klein an!)

Erst mal poste ich mein Code:
Spoiler
TEXT Code:
  1. // Taschenrechner coded by flashst3p
  2.  
  3. #include <iostream>
  4. #include <windows.h>
  5. #include <cmath>
  6. #include <conio.h>
  7. using namespace std;
  8.  
  9. // Variablen
  10.  
  11. int zahl1;
  12. int zahl2;
  13. string rechenzeichen;
  14. string neustart;
  15.  
  16. // Programm einstieg
  17. int main()
  18. {
  19. cout <<"Taschenrechner coded by flashst3p"<< endl << "#################################\n\n" << endl;
  20.  
  21. cout << "Bitte geben Sie die erste Zahl ein.\n" << endl;
  22. cin >> zahl1;
  23.  
  24. cout << "\nBitte geben Sie die zweite Zahl ein.\n" << endl;
  25. cin >> zahl2;
  26.  
  27. cout << "\nBitte geben Sie das Rechenoperation ein. (+ - / *)\n" << endl;
  28. cin >> rechenzeichen;
  29.  
  30. // Additionsfunktion
  31. if(rechenzeichen == "+")
  32. {
  33. cout << "\nDas Ergebnis betraegt: " << zahl1 + zahl2 << endl;
  34. }
  35.  
  36. // Subtraktionsfunktion
  37. if(rechenzeichen == "-")
  38. {
  39. cout << "\nDas Ergebnis betraegt: " << zahl1 - zahl2 << endl;
  40. }
  41.  
  42. // Divisionsfunktion
  43. if(rechenzeichen == "/")
  44. {
  45. cout << "\nDas Ergebnis betraegt: " << zahl1 / zahl2 << endl;
  46. }
  47.  
  48. // Multiplikation
  49. if(rechenzeichen == "*")
  50. {
  51. cout << "\nDas Ergebnis betraegt: " << zahl1 * zahl2 << endl;
  52. }
  53.  
  54. cout << "\nProgramm neusrarten? (Ja / Nein)\n" << endl;
  55. cin >> neustart;
  56.  
  57. if(neustart == "Ja")
  58. {
  59. system("start taschenrechner2.exe");
  60. exit(1);
  61. }
  62. else
  63. {
  64. return 0;
  65. }
  66.  
  67.  
  68. getch();
  69. return 0;
  70. }
  71.  

So weit so gut. Doch wollte ich noch die Funktion einbauen, wenn jemand bei der Rechenoption etwas anderes eingibt, als "+ - / *" , dass kommt: Eingabe ungültig und es erneut nach der Rechenoption gefragt wird, sprich man wieder zum Ursprung zurückkehrt, eben zu
TEXT Code:
  1. cout << "\nBitte geben Sie das Rechenoperation ein. (+ - / *)\n" << endl;
  2. cin >> rechenzeichen;

Ich dachte mir am Anfang ich mache etwas Allgemeines, sprich:
TEXT Code:
  1. if(rechenoption == "")
 

Und in die "" eben quasi ungleich, der normalen Zeichen + - / *. Hab leider vergessen, wie man das ungleicht herstellt. Und dann eben das er zu der obrigen Frage zurück springt.

Hoffe ihr habt irgendwie verstanden was ich versuchen wollte, zu erklären.


Update: na klar != ist ungleich, boah wie schlecht. Ok. Aber wie mache ich es das er dann wieder zurückspringt und das Programm wieder ab der Stelle abliest?

Update2: Meine Güte, erst weiter denken, dann Frage stellen. So ich habe mal meine "Überprüfungszeile" nach oben geschoben, über die anderen if() teile. Jetzt muss ich eine Schleife erstellen, sprich solange rechenzeichen != */-+ , ausgeben "Ihre Eingabe ist ungültig, wiederholen sie" und dann wenn es eins von den ist, soll er weiter machen. Sieht so aus:

TEXT Code:
  1. // Anderes Zeichen
  2. while(rechenzeichen != "*","/","-","+")
  3. {
  4. cout << "\nIhre Eingabe ist inkorrekt, bitte versuchen sie es erneut" << endl;
  5. cin >> rechenzeichen;
  6. }
  7.  

So aber jetzt ist egal ob ich "+" eingebe oder nicht, wiederholt er es immer und immer wieder.

Okay, Leute im IRC haben schon geholfen, insofern irgendwer hier noch die "Lösung" haben will:

TEXT Code:
  1. while(rechenzeichen != "*" && rechenzeichen != "/" && rechenzeichen != "-" && rechenzeichen != "+")
  2. {
  3. cout << "\nIhre Eingabe ist inkorrekt, bitte versuchen sie es erneut\n" << endl;
  4. cin >> rechenzeichen;
  5. }
  6.  

Danke, bye.

__________________

# Code 2 have FUN.
icon #2

Join Date: Apr 2012

Posts: 18

Hey,

Edit: Edit nicht gesehen
icon #3

Join Date: Aug 2007

Posts: 8646

User-Rating:

199 positive
33 negative
und richtig wäre das Programm so:

TEXT Code:
  1. // Taschenrechner coded by flashst3p
  2.  
  3. #include <iostream>
  4. #include <string>
  5. #include <limits>
  6.  
  7. // Programm einstieg
  8. void clearCin()
  9. {
  10. using std::cin;
  11. using std::numeric_limits;
  12. using std::streamsize;
  13.  
  14. cin.clear();
  15. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  16. }
  17.  
  18. int main()
  19. {
  20. using std::cout;
  21. using std::cin;
  22. using std::string;
  23.  
  24. cout << "Taschenrechner coded by flashst3p\n#################################\n\n";
  25.  
  26. string neustart;
  27. do
  28. {
  29. double zahl1;
  30. for (cout << "Bitte geben Sie die erste Zahl ein:\n"; !(cin >> zahl1); clearCin(),
  31. cout << "Bitte geben Sie die erste Zahl ein:\n");
  32.  
  33. double zahl2;
  34. for (cout << "Bitte geben Sie die zweite Zahl ein:\n"; !(cin >> zahl2); clearCin(),
  35. cout << "Bitte geben Sie die zweite Zahl ein:\n");
  36.  
  37. char rechenzeichen;
  38. for (cout << "Bitte geben Sie die Rechenoperation an: (+ - / *)\n"; !(cin >> rechenzeichen && string("+-/*").find(rechenzeichen) != string::npos); clearCin(),
  39. cout << "Bitte geben Sie die Rechenoperation an: (+ - / *)\n");
  40.  
  41. double result;
  42. switch (rechenzeichen)
  43. {
  44. case '+':
  45. result = zahl1 + zahl2;
  46. break;
  47. case '-':
  48. result = zahl1 - zahl2;
  49. break;
  50. case '/':
  51. result = zahl1 / zahl2;
  52. break;
  53. case '*':
  54. result = zahl1 * zahl2;
  55. break;
  56. }
  57. cout << "\nDas Ergebnis betraegt: " << result << "\n\n"
  58. << "\nProgramm neustarten? (Ja / Nein)\n";
  59. } while (cin >> neustart && neustart == "Ja");
  60.  
  61. return 0;
  62. }

greetz KN4CK3R

__________________

Hallo