长整数在 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 使用格式字符串 %dlong,它需要 int 变量的地址。您使用 printf.

的方式也是如此

您需要将格式字符串中的每个 %d 替换为 %ld。 您基本上需要这样做,因为 intlong 的大小不相等。

编辑:GCC 指出了使用 -Wall 选项的错误。