2010-03-27 3 views
1

когда я пытаюсь скомпилировать свою программу гр она дает мне это предупреждение об ошибке: целочисленная константа слишком велика для «длинного» типановичок GCC компилятор и с языком вопрос

, который относится к этим линиям

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

, а остальное в порядке. Я знаю, что я не должен использовать int для такого большого количества, любые предложения о том, что я должен использовать? если я заменил int на double, что должно заменить замену «% d»?

+0

получил он теперь работает, спасибо ребятам за быстрый ответ, я собираюсь добавлять и чаще использовать этот сайт !!! – dydx

+0

Назад, когда я работал со штрих-кодами (давным-давно), мы всегда рассматривали их как строки, а не числа. – 2010-03-27 09:12:22

+0

dydx: не забывайте отмечать ответ как «принятый». – caf

ответ

4

Используйте длинные longs вместо ints для целочисленных значений этого размера с суффиксом литерала LL:

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

не должно быть scanf ("% lld", & barcode); поскольку штрих-коды составляют 13 цифр? – dydx

+0

Хороший улов. Исправлена. –

0

Вы должны заменить ИНТ с длинными междунар и префикс константы с L

Как это:

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

Так было бы: long int barcode, a, b, c; scanf ("% il", & barcode); a = штрих-код/​​1000000000000L; b = штрих-код/​​100000000000L% 10; c = штрих-код/​​10000000000L% 10; правый? 13 цифр довольно большой, а как долго длинные? длинный штрих-код, a, b, c; что я могу заменить% d? – dydx

+0

nope, все еще не повезло, я добавил L в конце a = barcode/1000000000000L; и он по-прежнему дает мне целочисленную константу слишком большой для «длинного» типа – dydx

+0

Мне жаль, что я плохой, я забыл, что в c/C++ long int имеет тот же размер, что и int. Так что это долгий срок. Ill update my post – Henri

0

Изменение типа данных в long, как показано здесь

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

Недостаточно долго для многих 32-битных целей. – kennytm

0

(если вам нравится ответ, возможно, вы можете выбрать один?)

Кроме того, вы можете рассмотреть возможность размещения штрих-код в виде строки. Таким образом, вы можете получить доступ первые 3 цифры, которые вам нужно более легко (если это то, что вы примерно хотите - примечание: вы хотите с, чтобы быть первые две цифры после первой цифры, правильно)

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'); 
Смежные вопросы