Атои и ведущие 0 для десятичных чисел - PullRequest
0 голосов
/ 14 января 2011

При использовании atoi в C я пытаюсь преобразовать массив чисел char в int. У меня есть номер 0 на моем номере, и они не сохраняются, когда я распечатываю номер позже.

char num[] = "00905607";
int number;

number = atoi(num);

printf("%d", number);

Вывод этого будет 905607, и я бы хотел, чтобы оно было 00905607.

Есть идеи?

Ответы [ 9 ]

5 голосов
/ 14 января 2011

Используйте взамен strtol .Позволяет указать базу.

5 голосов
/ 14 января 2011

Вы можете сделать заполнение для вашего printf (), так что если вы хотите, чтобы каждый вывод был длиной 8 символов, вы бы использовали

printf("%08d", number);
3 голосов
/ 14 января 2011

Не используйте Атои. Используйте strtol с основанием 10.

В общем, нет смысла использовать atoi в современный код.

3 голосов
/ 14 января 2011

Этот код работает правильно, если он вообще работает. Целое число равно 905607 ... ведущих нулей не существует в математическом смысле.

У вас много проблем с этим кодом. Вы неправильно объявляете свою строку и не печатаете преобразованное число. Кроме того, если вы делаете printf(number);, вам нужно использовать строку формата. Если вы хотите иметь начальные пробелы в этом, вы можете использовать спецификатор ширины.

1 голос
/ 14 января 2011

В большинстве ответов предполагается, что вам нужно 8 цифр, а это не совсем то, что вы запрашивали.

Если вы хотите сохранить число лидирующих нулей, вам, вероятно, лучше сохранить его в виде строки и преобразовать егос strtol для расчетов.

1 голос
/ 14 января 2011

Да, когда вы хотите отобразить целые, вы должны снова отформатировать их как строки.Целое число - это просто число, оно не содержит никакой информации о том, как его отобразить.К счастью, функция printf уже содержит это, так что это будет что-то вроде

printf( "%08d", num);
0 голосов
/ 14 января 2011

Вы также можете посчитать числа чисел в строке и создать новое с начальными нулями.

Или проверить все замечательные теги формата для printf и использовать один для заполнения нулями.Вот, например, их много: http://www.cplusplus.com/reference/clibrary/cstdio/printf/

0 голосов
/ 14 января 2011

Если вы не хотите такого поведения; не используйте atoi.

Возможно, sscanf в формате% d?

0 голосов
/ 14 января 2011

Вы можете использовать sscanf и указать "% d" в качестве строки формата.

...