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

Posted

技术标签:

【中文标题】一个新手 gcc 编译器和 c 语言问题【英文标题】:a newbie gcc compiler and c language question 【发布时间】:2010-03-27 08:25:40 【问题描述】:

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

指的是这些行

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

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

【问题讨论】:

现在可以使用了,感谢大家的快速响应,我将添加书签并更频繁地使用此站点!!! 当我使用条形码时(很久以前),我们总是将它们视为字符串,而不是数字。 dydx:不要忘记将答案标记为“已接受”。 会的,谢谢。 @Neil,我的工作不能使用字符串/数组/函数。 为什么不呢?你正在使用一个函数 - scanf() 【参考方案1】:

对该大小的整数值使用 long longs 而不是 int,并带有 LL 文字后缀:

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

【讨论】:

不应该是scanf("%lld", &barcode);因为条形码是 13 位数字?【参考方案2】:

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

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

【讨论】:

【参考方案3】:

你应该用 long int 替换你的 int,并在常量前面加上 L

像这样:

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

【讨论】:

所以应该是:long int 条码,a,b,c; scanf("%il", &barcode); a = 条形码 / 1000000000000L; b = 条形码 / 100000000000L % 10; c = 条形码 / 10000000000L % 10;对? 13位是相当大的,那么long long呢?长长条码,a,b,c;我用什么替换 %d? 不,仍然没有运气,我在 a = 条形码 / 1000000000000L 的末尾添加了 L;它仍然给我整数常量对于“长”类型来说太大了 对不起,我的错,我忘记了在 c/c++ 中 long int 的大小与 int 相同。所以它应该是 long long int。我会更新我的帖子 您的示例中的 printf 将起作用,因为您给它的文字值在 32 位整数的约束范围内,但如果存储在 long long 中的值超过 MAX_INT,您将需要为 printf 说明符指定 %lld 以使其在大多数编译器上正确输出。【参考方案4】:

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

另外,您可以考虑将条形码放在字符串中。这样您就可以更轻松地访问您需要的前 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');

【讨论】:

以上是关于一个新手 gcc 编译器和 c 语言问题的主要内容,如果未能解决你的问题,请参考以下文章

linux下c编程怎么编译

G++和GCC和C,C++有啥区别的

C 语言学习的第 04 课:编译器常见错误和警告

C语言编译器icc与gcc编译出来的执行文件有啥区别?

如何用GCC在linux下编译C语言程序?

linux下c语言gcc编译的时候如果不知道.c文件怎么链接的?