一个新手 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
,如下所示
【讨论】:
【参考方案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 语言问题的主要内容,如果未能解决你的问题,请参考以下文章