我的代码有什么问题?当第一个值大于第二个值时,为什么我得到负值?这只发生在我使用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;
}
答案 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 */
如上面的语句a
,b
和res
被声明为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/