2010-03-27 6 views
1

quand je suis en train de compiler mon programme C, il me donne cet avertissement d'erreur: constante entière est trop grand pour le type « long »un compilateur gcc débutant et c la langue question

qui fait référence à ces lignes

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

et le reste est bien. Je sais que je ne suis pas censé utiliser int pour un si grand nombre, des suggestions sur ce que je devrais utiliser? si je remplace int par double, à quoi la partie '% d' devrait-elle être remplacée?

+0

obtenu ça marche maintenant, merci les gars pour la réponse rapide, je vais mettre en signet et utiliser ce site plus souvent !!! – dydx

+0

À l'époque où je travaillais avec des codes-barres (il y a longtemps), nous les traitions toujours comme des chaînes, pas des chiffres. –

+0

dydx: n'oubliez pas de marquer une réponse comme "acceptée". – caf

Répondre

4

utilisation à long long au lieu de nombre entier pour les valeurs entières de cette taille, avec le suffixe littéral LL:

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

ne devrait-il pas être scanf ("% lld", & code à barres); puisque les codes à barres sont 13 chiffres? – dydx

+0

Bonne prise. Fixé. –

0

Vous devez remplacer votre int avec long int, et le préfixe des constantes avec L

Comme ceci:

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

Donc, ce serait: long code à barres int, a, b, c; scanf ("% il", & code à barres); a = code à barres/1000000000000L; b = code à barres/100000000000L% 10; c = code à barres/10000000000L% 10; à droite? 13 chiffres est assez grand, qu'en est-il long long à la place? code-barres long, a, b, c; qu'est-ce que je remplace% d avec? – dydx

+0

non, toujours pas de chance, j'ai ajouté le L à la fin de a = code à barres/1000000000000L; et il me donne toujours la constante entière est trop grande pour le type «long» – dydx

+0

Je suis désolé ma mauvaise, j'ai oublié que dans c/C++ long int a la même taille que int. Donc ça devrait être long long int. Je mets à jour mon message – Henri

0

Modifier le type de données à long comme indiqué ici

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

Pas assez long sur de nombreuses cibles 32 bits. – kennytm

0

(si vous voulez une réponse, vous pourriez peut-être choisir un?)

En outre, vous pourriez envisager de placer le code à barres dans une chaîne à la place. De cette façon, vous pouvez accéder aux 3 premiers chiffres que vous avez besoin plus facilement (si c'est ce que vous voulez à peu près - Note: vous ne voulez c être les deux premiers chiffres après le premier chiffre, correct)

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');