отсканированный 0 отсутствует в printf - PullRequest
0 голосов
/ 28 декабря 2018

В числовой части scanf() этого кода, если я введу ввод 01234567, функция printf() напечатает 1234567, а 0 не напечатает.Что делать, чтобы решить проблему?

#include<stdio.h>
int main()
{
    long int number , date , month , year ;
    char name[50];

    printf("Enter name \n");
    gets(name);
    printf("Enter mobile number\n");
    scanf("%ld",&number);

    printf("Enter date of birth(date)\n");
    scanf("%ld",&date);

    printf("Enter date of birth(month)\n");
    scanf("%ld",&month);

    printf("Enter date of birth(year)\n");
    scanf("%ld",&year);

    ///printing starts
    printf("Name: %s\n",name);
    printf("Number: %ld\n",number);
    printf("DOB: %ld/%ld/%ld",date,month,year);
    return 0;
}

для числовой части, этот код показывает вывод: 1234567, но ввод был 01234567

Ожидаемый вывод: 01234567

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018
printf("Number: %011ld\n",number);

Это будет префикс 0, чтобы сделать его одиннадцатью символами, как требуется в OP.Следовательно 01234567 станет 00001234567

0 голосов
/ 28 декабря 2018

Для печати начальных нулей код может записать длину с помощью "%n" числового ввода для последующей печати. ​​

printf("Enter mobile number\n");

int n1 = 0;
int n2 = 0;
//     v------------ consume leading spaces.
//     |vv---vv----- record offset of scan
scanf(" %n%ld%n",&n1, &number, &n2);
//               v--------------- pad with zeros as needed
//               |v-------------- width determined by argument
printf("Number: %0*ld\n", n2-n1, number);
0 голосов
/ 28 декабря 2018

Нет реальной разницы между числами 1, 01, 0000001, 1.0 и т. Д. (a) .Это потому, что число является значением , , а не форматированием .

Если вы хотите сохранить начальные нули, вам, вероятно, следует рассматривать его как строку, а не какномер.

Это особенно верно, если вы говорите о телефонных номерах (что, похоже, является проблемным случаем), поскольку они могут входить в многие формы, которые не соответствуютпростое целое число, такое как:

0413 198 234
(0407) 123-456
0412 diablo

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


(a) С точки зрения математических величин, очевидно.Они могут трактоваться по-разному в исходном коде C в зависимости от типа данных или используемого радиуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...