новый компилятор gcc и вопрос о языке c - PullRequest
1 голос
/ 27 марта 2010

, когда я пытаюсь скомпилировать свою программу на c, выдается следующее предупреждение об ошибке: целочисленная константа слишком велика для типа long

что относится к этим строкам

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

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

Ответы [ 4 ]

4 голосов
/ 27 марта 2010

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

long long barcode, a, b, c;
scanf("%lld", &barcode);
a = barcode / 1000000000000LL;
b = barcode / 100000000000LL % 10;
c = barcode / 10000000000LL % 10;
0 голосов
/ 27 марта 2010

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

Кроме того, вы можете вместо этого поместить штрих-код в строку. Таким образом, вы можете легко получить доступ к первым 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');
0 голосов
/ 27 марта 2010

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

long barcode, a, b, c;
scanf("%ld", &barcode);
a = barcode / 1000000000000L;
b = barcode / 100000000000L % 10;
c = barcode / 10000000000L % 10;
0 голосов
/ 27 марта 2010

Вам следует заменить int на long int и добавить к константе префикс L

Как это:

long long unsigned int barcode;
barcode = 100000000LL;
printf("Barcode is %li", barcode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...