簡體   English   中英

C scanf格式字符串警告

[英]C scanf format string warning

我正在研究Euler#3( http://projecteuler.net/problem=3 )。 我認為我的邏輯是正確的,但是在嘗試使用scanf(和printf)時遇到錯誤。 我目前正在嘗試使用%li,這是我得到的錯誤:

euler3.c: In function ‘main’:
euler3.c:30: warning: format ‘%li’ expects type ‘long int **’, but argument 2 has type ‘long int’
euler3.c:30: warning: format ‘%li’ expects type ‘long int *’, but argument 2 has type ‘long int’

我理解錯誤,但對於我的生活,我找不到解決方案。 如果需要,這是我的代碼。

#include <stdio.h>

long greatestPrime(long num)
{
        int i;

        for(i = 2; i <= num; i++)
        {
                if(num%i == 0)
                {
                        num = num/i;
                        i--;
                }
        }

        return num;
}

int main(int argc, char *argv[])
{
        unsigned long greatest;

        printf("Enter number to find prime factor: ");
        scanf("%li",greatest);

        printf("%li",greatestPrime(greatest));

        return 0;
}

scanf正在尋找一個指向長整數( long int * )的指針,而不是長整數,所以你需要使用&運算符傳遞greatest的地址:

scanf("%li", &greatest);

正如另一個答案所示,您需要使用%lu ,因為您使用的是unsigned long int

scanf("%lu", &greatest);

使用%lu格式,因為它表示unsigned long int而不是long int

scanf("%lu",&greatest);

為了讓scanf修改你的變量,它需要它的地址(指向你變量的指針)。 使用&運算符傳遞greatest的地址:

scanf("%lu", &greatest);

編輯 :此外, %li應該是%lu ,因為greatest是無符號。

你將一個整數傳遞給scanf()

scanf("%li",greatest);

您應該傳遞正確鍵入的變量的地址以保存無符號長整數:

scanf("%lu", &greatest);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM