长整数在 C 中被打印为负值
Long integers are being printed as negative values in C
我写这个算法是为了检查一个数是否是质数以及哪些数能除掉它。现在我想知道什么是 600851475143 除数(例如),它输出一个负数。
那是我的代码:
#include <stdio.h>
/* Discover what numbers divide the one read as input, then show if it's prime */
int main() {
long checker;
long step = 1;
int divisors = 0;
printf("Enter with the number you want know the divisors: ");
scanf("%ld", &checker);
while(step <= checker){
/* check which numbers divide the number read*/
if (checker % step == 0) {
printf("%ld divides %ld\n", step, checker);
step +=1;
divisors +=1;
}
else{
step+=1;
}
}
/*Now check if it is prime*/
if (divisors == 2) {
printf("ADDITIONAL INFO: %ld IS a prime number.\n", checker);
}
else {
printf("ADDITIONAL INFO: %ld IS NOT a prime number.\n", checker);
}
printf("Done!\n");
return 0;
}
问题是您 scanf
使用格式字符串 %d
到 long
,它需要 int
变量的地址。您使用 printf
.
的方式也是如此
您需要将格式字符串中的每个 %d
替换为 %ld
。
您基本上需要这样做,因为 int
和 long
的大小不相等。
编辑:GCC 指出了使用 -Wall
选项的错误。
我写这个算法是为了检查一个数是否是质数以及哪些数能除掉它。现在我想知道什么是 600851475143 除数(例如),它输出一个负数。 那是我的代码:
#include <stdio.h>
/* Discover what numbers divide the one read as input, then show if it's prime */
int main() {
long checker;
long step = 1;
int divisors = 0;
printf("Enter with the number you want know the divisors: ");
scanf("%ld", &checker);
while(step <= checker){
/* check which numbers divide the number read*/
if (checker % step == 0) {
printf("%ld divides %ld\n", step, checker);
step +=1;
divisors +=1;
}
else{
step+=1;
}
}
/*Now check if it is prime*/
if (divisors == 2) {
printf("ADDITIONAL INFO: %ld IS a prime number.\n", checker);
}
else {
printf("ADDITIONAL INFO: %ld IS NOT a prime number.\n", checker);
}
printf("Done!\n");
return 0;
}
问题是您 scanf
使用格式字符串 %d
到 long
,它需要 int
变量的地址。您使用 printf
.
您需要将格式字符串中的每个 %d
替换为 %ld
。
您基本上需要这样做,因为 int
和 long
的大小不相等。
编辑:GCC 指出了使用 -Wall
选项的错误。