以正确的方式使用 long long 数据类型

Using long long data type in the correct way

我的代码有什么问题?当第一个值大于第二个值时,为什么我得到负值?这仅在我使用 long long 数据类型时发生。我只是这里的新手,请原谅我提出这个愚蠢的问题。这是代码:

#include<stdio.h>
int main()
{
    long long int a, b, res;

    while(scanf("%d %d", &a, &b)!=EOF)
    {
        if(a>b)
        {
            res=a-b;
            printf("%d\n", res);
        }
        else
        {
            res=b-a;
            printf("%d\n", res);
        }

    }

    return 0;
}
printf("%d\n", res);

它打印的是int,你想打印long long int,所以你应该使用:

printf("%lld\n", res);

同样适用于 scanf(),使用 %lld 作为格式说明符来获取 long long

的输入
long long int a, b, res; /* firstly initialize all variable, enable warning flag */

由于在上面的语句中 abres 被声明为 long long 您应该使用 %lld 作为格式说明符而不是 %d 否则会导致未定义的行为。

scanf("%d %d", &a, &b); ---> scanf("%lld %lld", &a, &b);
printf("%d\n", res);    ---> printf("%lld\n", res);

旁注,始终使用 -Wall -Wpedantic -Wstrict-prototypes -Werror.

之类的标志编译代码

你不仅在打印 int 而不是 long long,你还在读取 int 而不是 long long

将所有 %d 更改为 %lld

如果它不适用于您的编译器,请使用 <inttypes.h> 并将 %d 更改为 %I64d

每种数据类型都有特定的格式说明符。您必须使用有效的。 long long int 的格式说明符是 %lld 而不是 %d.

查看 link 了解有关 C 中数据类型的详细信息: https://www.geeksforgeeks.org/data-types-in-c/