[C/C++] Hilfe Modulo Funktion

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von leex, 19. Dezember 2008 .

  1. 19. Dezember 2008
    Hilfe Modulo Funktion

    Habe einen einfachen Taschenrechner geschrieben in C. Jedoch funktioniert die Ausgabe von Modulo nicht.. er zeigt immer an das 0 raus kommt....kann mir jemand sagen warum? und wie es richtig ist..

    Code:
    [COLOR="Red"]#include <stdio.h>
    int main(void)
    {
     int weiter;
     do{
     float a,b,erg;
     char x;
     
     printf("Geben Sie einen Wert fuer a ein: "); scanf("%f",&a); getchar();
     printf("Geben Sie einen Wert fuer b ein: "); scanf("%f",&b); getchar();
     printf("Geben Sie einen Operator ein (+,-,*,/,:,%): ");
     scanf("%c",&x); getchar();
    
     switch(x)
     {
     case '-' : erg=a-b; break;
     case '+' : erg=a+b; break;
     case '*' : erg=a*b; break;
     case '/' :
     case ':' : if(b!=0)erg=a/b; 
     else printf("Division by Zero"); break;
     int a,b,erg;
     case '%' : while(x=='%'){ int a,b,erg; erg=a%b; break;}
     
     }
     
     printf("Das Ergebnis ist: %.3f\n",erg);
     
     printf("Nochmal [1 = JA | 0 = NEIN]? "); 
     scanf("%d",&weiter);
     }
     while(weiter==1);
    system("PAUSE");
    return(0);
    }[/COLOR]
     
  2. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    Code:
     case '%' : while(x=='%'){ int a,b,erg; erg=a%b; break;}
    
    Du definierst hier a & b, und damit wird das float a&n quasi 'verdeckt'. Und da du a und b nicht initialisiert hast, kriegst du natürlich 0 raus.

    edit: Und natürlich nochn größerer Fehler:
    Das erg, das du hier neu definierst hat nur innerhalb von dem while{}-Block gültigkeit, d.h. sobald du zu deiner printf()-Anweisung kommst, zählt wieder das "alte" erg, und das is natürlich 0, da du in der while()-schleife an das lokale erg zugewisen hast.
     
  3. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    aha ok....und wie kann ich es richtig machen????
     
  4. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    liegt doch auf der Hand:

    Code:
    switch(x)
     {
     case '-' : erg=a-b; break;
     case '+' : erg=a+b; break;
     case '*' : erg=a*b; break;
     case '/' :
     case ':' : if(b!=0)erg=a/b; 
     else printf("Division by Zero"); break;
    
     case '%' : while(x=='%'){erg=a%b; break;}
     
     }
    
     
  5. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    das geht doch gar nicht....bei modulo sind nur Ganzzahlige Werte zugelassen, das ist ja mein problem das ich dort umdefinieren muss in int....wenn ichs so machen würd wie du geschrieben hast kann ich die kopfschleife auch weglassen
     
  6. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    Dann wird eben luxuriös gecastet:

    Code:
    switch(x)
     {
     case '-' : erg=a-b; break;
     case '+' : erg=a+b; break;
     case '*' : erg=a*b; break;
     case '/' :
     case ':' : if(b!=0)erg=a/b; 
     else printf("Division by Zero"); break;
    
     case '%' : while(x=='%'){erg=(float)((int)a%(int)b); break;}
     
     }
    
     
  7. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    funktioniert trotzdem nicht, auch wenn ich es so einfüge
     
  8. 19. Dezember 2008
    AW: Hilfe Modulo Funktion

    Ich sollte das, was ich poste besser durchlesen....

    ... Warum verwendest du eine while-Schleife???

    Code:
    switch(x)
     {
     case '-' : erg=a-b; break;
     case '+' : erg=a+b; break;
     case '*' : erg=a*b; break;
     case '/' :
     case ':' : if(b!=0)erg=a/b; 
     else printf("Division by Zero"); break;
    
     case '%' : erg=(float)((int)a%(int)b); break;
     
     }
    

    Was für eine IDE verwendest du? Schonmal mitm Debug-Modus versucht, das ganze einzeln nach zu vollziehen?
     
  9. 20. Dezember 2008
    AW: Hilfe Modulo Funktion

    ich verwende die while schleife weil ich nicht weiß wie ich das sonst mit den integer werten machen soll.....könnt gern nen besseren vorschlag machen

    ich verwende dev-c++ unter windows und unter linux gcc
     
  10. 20. Dezember 2008
    AW: Hilfe Modulo Funktion

    Das ist KEINE Begründung!

    Warum sollte der von uns gepostete Code nicht funktionieren? Was passiert? Was geht schief?

    Ohne Antworten und vernünftigen Feedback wird aus der Sache nichts.
     
  11. 20. Dezember 2008
    AW: Hilfe Modulo Funktion

    es kommt wieder als ergebnis 0.000 raus, wie davor auch.....kannst ja selber ausprobieren ;-)
     
  12. 20. Dezember 2008
    AW: Hilfe Modulo Funktion

    mit welchen Zahlen hast dus denn probiert?

    Bei z.B. 6 und 3 wär klar dass 0 rauskommt! ( is ja schließlich der Modulo Operator )
    Also versuchs mal mit Zahlen die sich nicht ohne Rest teilen lassen. Vll liegts ja dadran *g*

    Gruß
    meckes
     
  13. 20. Dezember 2008
    AW: Hilfe Modulo Funktion

    schreib einfach

    case '%' : erg=((int)a%(int)b); break;

    und nim nicht zahlen her die null ergeben teste einfahc mal 5 und 4 oder sowas

    greetz
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.