Richtig Casten??



  • Hey,

    hab ein Problem... und bin schon seit paar Stunden unterwegs auf der Suche nach der Lösung für dieses Problem... Konnte aber soweit nichts finden, wie ich das bewerkstelligen soll...
    Mein Erkenntnis ist bisher diese, dass es an den Typen liegt.
    Ich Versuche ein int durch ein unsigned long zu teilen... dabei bekomme ich ein merkwürdiges Ergebnis heraus. Habe schon versucht das int zu long unsigned int zu casten oder auch andersherum.

    Hier mein Versuch:

    #include <stdio.h>
    int values [] = {391, 17, 93, 12};
    #define NUM sizeof(values)/sizeof(int)
    
    int main()
    {
    size_t i;
    int sum = 0;
    
    for(i=0; i<NUM; i++)
    {
    sum += values[i];
    }
    printf(}{"\nAvg is %d\n", sum/(int) NUM);
    return 0;
    }
    

    Ergebnis ist>
    Avg is 8

    Ergebnis muesste aber 128 sein.



  • Wenn ich den Präprozessor drüberlaufen lasse sieht es so aus:

    int values [] = {391, 17, 93, 12};
    
    int main()
    {
    size_t i;
    int sum = 0;
    
    for(i=0; i<sizeof(values)/sizeof(int); i++)
    {
    sum += values[i];
    }
    printf(}{"\nAvg is %d\n", sum/(int) sizeof(values)/sizeof(int));
    return 0;
    }
    

    Klingelt jetzt was?


  • Mod

    Außerdem: Compilerwarnungen beachten (und natürlich auch anschalten!). Code bitte immer Copy&Paste, nicht abtippen.

    warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’
    


  • Vielen Dank...
    darauf waere ich wahrscheinlich erst morgen gekommen...
    Hatte ja die Warnungen angeschaltet, deswegen dachte ich, dass es wegen der Typumwandlung Probleme geben wuerde.


Anmelden zum Antworten