一个新手gcc编译器和c语言问题

时间:2010-03-27 08:25:40

标签: c

当我尝试编译我的c程序时,它给了我这个错误警告:整数常量对于'long'类型而言太大了

指的是这些行

int barcode, a, b, c;
scanf("%d", &barcode);
a = barcode / 1000000000000;
b = barcode / 100000000000 % 10;
c = barcode / 10000000000 % 10;

其余的都很好。我知道我不应该使用int这么大的数字,对我应该使用什么的任何建议?如果我用双倍替换int应该用'%d'部分替换那么?

4 个答案:

答案 0 :(得分:4)

使用long longs而不是int来表示该大小的整数值,使用LL文字后缀:

long long barcode, a, b, c;
scanf("%lld", &barcode);
a = barcode / 1000000000000LL;
b = barcode / 100000000000LL % 10;
c = barcode / 10000000000LL % 10;

答案 1 :(得分:0)

你应该用long int替换你的int,并用L

作为常量的前缀

像这样:

long long unsigned int barcode;
barcode = 100000000LL;
printf("Barcode is %li", barcode);

答案 2 :(得分:0)

将数据类型更改为long,如此处所示

long barcode, a, b, c;
scanf("%ld", &barcode);
a = barcode / 1000000000000L;
b = barcode / 100000000000L % 10;
c = barcode / 10000000000L % 10;

答案 3 :(得分:0)

(如果您喜欢答案,也许您可​​以选择一个?)

另外,您可以考虑将条形码放在字符串中。通过这种方式,您可以更轻松地访问您需要的前3位数字(如果这是您大致想要的 - 注意:您确实希望c成为第一个数字后的前两位数,对吗?)

char barcode[14];
int a, b, c;
scanf("%s", &barcode);
a = (int) (barcode[0] - '0');
b = (int) (barcode[1] - '0');
c = b * 10 + (int)(barcode[2] - '0');