Ведущие нули, используемые в int
Сначала улучшите код:
Проверьте возвращаемое значение из scanf()
.
Обязательно используйте "%d"
вместо "%i"
, когда возможны начальные нули с вводом десятичный . При "%i"
ведущий 0 указывает на восьмеричный ввод. @ Антти Хаапала . Это изменение в одиночку с помощью ОП.
"%d" "012" --> 12 decimal
"%d" "078" --> 78 decimal
"%i" "012" --> 10 decimal
"%i" "078" --> 7 decimal, with "8" left in stdin
Различные подходы к поиску ведущего '0'
следуют:
Чтобы подсчитать количество введенных символов, запишите позицию сканирования до и после int
, используя "%n"
. "%n"
не влияет на возвращаемое значение scanf()
.
int n1;
int offset1, offset2;
if (scanf(" %n%d%n", &offset1, &n1, &offset2) == 1) {
int width = offset2 - offset1;
printf("%0*d\n", width, n1);
}
Считает символов , а не только цифр , поскольку "+123"
имеет ширину 4.
Более надежный подход будет читать входные данные в виде строки и затем обрабатывать их.
// printf("Enter the first 6 digits of the barcode: \n");
char buf[6+1];
if (scanf(" %6[0-9]", buf) == 1) {
int n1 = atoi(buf);
int width = strlen(buf);
printf("%0*d\n", width, n1);
}