Formatbezeichner für unsigned long long ?



  • Hallo,

    ich verwende Code:Blocks auf einem Win64 Rechner und bekomme warnings "unknown conversion type character l in format. Too many arguments for format" bei der Verwendung von unsigned long long.

    llu ist doch der Formatbezeichner für unsigned long long oder?

    #include <stdio.h>
    
    void fibonacciNumber(int n)
    {
        unsigned long long fib1 = 0, fib2 = 1;
    
        if (n < 1)
            return;
    
        printf("%llu ", fib1);
    
        for (int i = 1; i < n; i++) {
            printf("%llu ", fib2);
    
            unsigned long long nextNum = fib1 + fib2;
            fib1 = fib2;
            fib2 = nextNum;
        }
    }
    
    int main()
    {
        int numbers, clearBuffer;
        char answer;
    
        do
        {
            printf("Fibonacci sequence calculator - Enter a number :");
            scanf("%i",&numbers);
    
            fibonacciNumber(numbers);
    
            while ((clearBuffer = getchar()) != EOF && clearBuffer != '\n');
    
            printf("\n\nNew calculation? [y / n]");
            scanf("%c",&answer);
    
        }while ((answer == 'y') || (answer == 'Y'));
    
        return 0;
    }
    


  • Was für einen Compiler verwendet Code::Blocks denn? Der printf-Code sieht richtig aus, das Programm kompiliert mit gcc ohne Warnungen.

    PS:
    Du könntest beim scanf einfach ein Leerzeichen vor das "%c" setzen, also scanf(" %c", &answer), um dir die clear-Buffer-Loop zu sparen.



  • @ledi Das hängt von der verwendeten Standard Library ab.

    Es wird auf Windows durchaus die MS Library benutzt.
    Und die kennt kein %llu.

    Evtl. geht %I64u oder die passenden Bezeichner aus der <stdint.h>

    #include <stdint.h>
    #include <stdio.h>
    
    uint64_t  wert;
    
    printf("Der Wert ist %" PRIui64 "\n", wert);
    

Anmelden zum Antworten