我正在研究欧拉问题#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
结合会导致未定义行为。printf
和scanf
不是格式安全的。用户需要注意,在这种情况下应该使用lu
。 - Alok Savelong int
。然而,由于你正在查找质数,无符号类型会给你更大的测试值范围。 - Matt Lacey