wo is der fehler? :)

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

  • wo is der fehler? :)

    hey ho, ich weiß, dass das programm eher trivial ist, aber es macht nich das was ich will und ich weiß nich warum...
    also aufgabe ist erstmal zwei zahlen einzugeben, die dann durch auswahl in einem menü addiert, dividiert,.. werden sollen und es dann so zu erweitern, dass immer wieder neue zahlen eingeben werden können bis zum abbruch.
    bei mir ist es jetz so, dass ich die zahlen eingeben kann und dann auch den entsprechnenden buchstaben, er aber nichts rechnet/ausgibt/... sondern einfach wieder nach 2 zahlen fragt. wenn ich in der if-bedingung ein "=" wegnehme addiert er immer, egal welcher buchstabe eingegeben wird, ich kann daraus aber nicht auf das problem schließen... sry is vll echt trivial für euch, aber ich bin mit char noch nicht vertraut.
    ich kopier euch mal meinen quelltext rein:

    Quellcode

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main()
    4. {
    5. char c;
    6. float ergebnis,x,y;
    7. while(1)
    8. {
    9. printf("Geben Sie die erste Zahl ein: ");scanf("%f",&x);
    10. printf("Geben Sie die zweite Zahl ein: ");scanf("%f",&y);
    11. printf("Waehlen Sie a fuer Addition, m fuer Multiplikation, d fuer Division, s fuer Subraktion oder q um das Programm zu beenden: ");
    12. scanf("%c",&c);
    13. getchar ();
    14. if (c=='a')
    15. {
    16. printf("Addition beider Zahlen\n");
    17. ergebnis=x+y;
    18. printf("%f + %f = %f\n",x,y,ergebnis);
    19. continue;
    20. }
    21. if (c=='m')
    22. {
    23. printf("Multiplikation beider Zahlen\n");
    24. ergebnis=x*y;
    25. printf("%f * %f = %f\n",x,y,ergebnis);
    26. continue;
    27. }
    28. if (c=='d')
    29. {
    30. printf("Division beider Zahlen\n");
    31. ergebnis=x/y;
    32. printf("%f / %f = %f\n",x,y,ergebnis);
    33. continue;
    34. }
    35. if (c=='s')
    36. {
    37. printf("Subtraktion beider Zahlen\n");
    38. ergebnis=x-y;
    39. printf("%f - %f = %f\n",x,y,ergebnis);
    40. continue;
    41. }
    42. if (c=='q')
    43. break;
    44. }
    45. printf("Programm beendet!");
    46. return 0;
    47. }
    Alles anzeigen



    vll könnte man das generell eleganter machen, aber bei der aufgabe gehts um die break und continue anweisung, da die jetz eingeführt worden.
    wär lieb wenn mal jemand drüber schauen könnte. danke.

    //EDIT: highlighted by d0nut
  • der Fehler liegt bei getchar()

    printf("Geben Sie die erste Zahl ein: ");scanf("%f",&x);
    printf("Geben Sie die zweite Zahl ein: ");scanf("%f",&y);
    printf("Waehlen Sie a fuer Addition, m fuer Multiplikation, d fuer Division, s fuer Subraktion oder q um das Programm zu beenden: ");
    scanf("%c",&c);
    getchar (); <- Das hat hier nix verloren
  • Willkommen im Forum könntest du des nächste mal bitte mit highlight ner machen dann sieht mans besser

    so was hast du vergessen das

    fflush(stdin); sollte nach jedem scanf stehen(außer in manchen fällen)
    da sich sonst noch was von der vorherigen eingabe drauf befindet
    also das was in y bzw x steht also kann es nie a,s,d,m oder q sein außerdem ne struktur sollte man auch lernen

    MFG Donasa

    Quellcode

    1. #include <stdio.h>
    2. #include <math.h>
    3. int main()
    4. {
    5. char c;
    6. float ergebnis,x,y;
    7. while(1)
    8. {
    9. printf("Geben Sie die erste Zahl ein: ");
    10. scanf("%f",&x);
    11. fflush(stdin);
    12. printf("Geben Sie die zweite Zahl ein: ");
    13. scanf("%f",&y);
    14. fflush(stdin);
    15. printf("Waehlen Sie a fuer Addition, m fuer Multiplikation, d fuer Division, s fuer Subtraktion oder q um das Programm zu beenden:");
    16. scanf("%c",&c);
    17. fflush(stdin);
    18. if(c=='a')
    19. {
    20. printf("Addition beider Zahlen\n");
    21. ergebnis=x+y;
    22. printf("%f + %f = %f\n",x,y,ergebnis);
    23. continue;
    24. }
    25. if(c=='m')
    26. {
    27. printf("Multiplikation beider Zahlen\n");
    28. ergebnis=x*y;
    29. printf("%f * %f = %f\n",x,y,ergebnis);
    30. continue;
    31. }
    32. if(c=='d')
    33. {
    34. printf("Division beider Zahlen\n");
    35. ergebnis=x/y;
    36. printf("%f / %f = %f\n",x,y,ergebnis);
    37. continue;
    38. }
    39. if(c=='s')
    40. {
    41. printf("Subtraktion beider Zahlen\n");
    42. ergebnis=x-y;
    43. printf("%f - %f = %f\n",x,y,ergebnis);
    44. continue;
    45. }
    46. else
    47. break;
    48. }
    49. printf("Programm beendet!");
    50. return 0;
    51. }
    Alles anzeigen
    Meine Sprachen: C, C++,C# PHP
    E-Mail | MSN: gre.burgstaller@aon.at
  • aja ich hab das if(c=='q') mit else ersetzt das heißt das man z.b.: auch f zum beenden drücken kann und warum wenn du bei
    if(c='a') immer addiert hast ist auch klar da

    =....Zuweisung da die funktoniert in der klammer auch eine wahre aussage
    ==..Vergleich das musst du benutzen wenn du schon magst ob was gleich ist


    MFG Donasa
    Meine Sprachen: C, C++,C# PHP
    E-Mail | MSN: gre.burgstaller@aon.at
  • hey ho, habt ganz lieben dank für die superschnellen antworten!
    ok also ohne das getchar() funzt es, was mir jetz ein kleines rätsel ist, weil meine dozentin das explizit mit reingenommen hat mit der begründung, dass sonst die eingabetaste auch als zeichen ausgewertet werden würde und das von getchar unterbunden wird... aber da es ohne funktioniert, glaub ich einfach mal, dass ihr recht habt :)
    und zur switch anweisung... die hatten wir noch nich, also ich hab mir das schon durchgelesen, aber ich denke die aufgabe hat sie jetz wirklich gestellt, damit wir den unterschied zw continue und break sehen - ich bemerke hier mal am rande, dass ich nur den kurs "einführung in die programmierung" belege und ich somit erst ein paar wochen lulli C mache *g.
    so das mit dem highlight tut mir leid, ich hab mich vorhin erst angemeldet und bin jetz noch nich vertraut mit dem forum... und jaaaaa, die struktur is da bei mir, is nur durchs kopieren nich so schön geworden, ich fands jetz auch nich so komplex, das ich das hätte nochmal ändern wollen.
    für den fall dass y=0 is, mach ich noch, wollt nur erstmal zwischentesten und da da ja schon nix ging, hab ich das erstmal hinten angestellt... aber von try catch hab ich wirklich noch nichts gehört...

    also habt ganz vielen dank für eure hilfe!!!
  • "Donasa" schrieb:

    aja du solltest unbedingt noch bei der div. checklen ob y == 0 ist weil wenn das der Fall ist gibts nen error oder du machst es meiner meinung nach eleganter mit try....catch


    Division durch 0 gibt doch keine C++ - Exception ... da kannst du dann nichts mit catch() machen ...

    Wenn ich diese IEEE75? richtig verstanden habe dürfte das ergebniss einer Division durch 0 NaN sein ... möglicherweise gibts dann beim printf() einen Laufzeitfehler
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)