Ведущие нули используются в int - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь завершить программу, но ведущий ноль удаляется, когда он читается как int. Мне нужен этот ведущий ноль в том случае, если пользователь вводит ноль в начале, потому что я использую его для выполнения математических операций в программе и не могу просто добавить начальный ноль в printf.

printf("Enter the first 6 digits of the barcode: \n");
scanf("%i", &n1);
printf("Enter the first 6 digits of the barcode: \n");
scanf("%i", &n2);

//Splits number1 into individual digits
   count1 = 0;
   while (n1 != 0){
       array1[count1] = n1 % 10;
       n1 /= 10;
       count1++;
   }

   count2 = 0;
   while (n2 > 0){
       array2[count2] = n2 % 10;
       n2 /= 10;
           count2++;
//Steps 1-3
int sumo = array1[5]+array1[3]+array1[1]+array2[5]+array2[3]+array2[1]; //adds odd
int sume = array1[4]+array1[2]+array1[0]+array2[4]+array2[2]; //adds even without 12
int sumd = 3*sumo; //multiplies odds
int sum  = sume+sumd; //adds above and evens
int chec = sum%10;
int check = 10-chec;

Всю программу можно найти здесь

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы должны сканировать ввод как строку вместо int. Позже вы можете изменить его на int (для расчета суммы), используя atoi.

0 голосов
/ 12 ноября 2018

Ведущие нули, используемые в int

Сначала улучшите код:

  1. Проверьте возвращаемое значение из scanf().

  2. Обязательно используйте "%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);
}
0 голосов
/ 12 ноября 2018

Ведущие нули всегда будут потеряны, когда вы сохраните значение как целое число, поэтому вам нужно будет сохранить значение как что-то другое (возможно, строку)

...