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

时间:2018-05-11 06:11:02

标签: c loops long-integer

我的代码有什么问题?当第一个值大于第二个值时,为什么我得到负值?这只发生在我使用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;
}

4 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

如上面的语句abres被声明为long long,您应该使用%lld作为格式说明符而不是{{1}否则会导致未定义的行为。

%d

Sidenote,始终使用scanf("%d %d", &a, &b); ---> scanf("%lld %lld", &a, &b); printf("%d\n", res); ---> printf("%lld\n", res); 等标记编译代码。

答案 2 :(得分:0)

不只是你打印int而不是long long,你也只是读取int而不是long long

将您的所有%d更改为%lld

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

答案 3 :(得分:0)

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

检查链接以获取有关C中数据类型的详细信息: https://www.geeksforgeeks.org/data-types-in-c/