Замыкающие нули в printf / sprintf - PullRequest
3 голосов
/ 25 ноября 2011

Я бы хотел, чтобы вывод числа всегда имел 6 цифр

Например:

  • Если число равно 1, выход должен быть 100000
  • если число равно 23, выходное значение должно быть 230000
  • , если число равно 236, выходное значение должно быть 236000

Как это можно сделать с помощью printf / sprintf?

Ответы [ 5 ]

5 голосов
/ 25 ноября 2011

printf и его варианты могут заполнять нули слева, а не справа.введите число, затем добавьте необходимые нули самостоятельно или убедитесь, что номер имеет длину 6 цифр:

while(num < 100000) 
    num *= 10;

(этот код предполагает, что число не является отрицательным, иначе вы столкнетесь с проблемами)

2 голосов
/ 25 ноября 2011

printf вернет количество напечатанных символов.Для этого вы можете распечатать оставшиеся нули:

int num = 3; // init
int len = printf("%d", num);
for (int i = 0; i < 6-len; ++i)
    printf("0");

Вы должны добавить некоторые проверки ошибок (например, если len больше 6).

С sprintf выможно использовать memset в оставшемся буфере, что будет проще.

0 голосов
/ 25 ноября 2011

Используйте возвращаемое значение printf (как в первой строке цикла for ниже)

#include <stdio.h>

int main(void) {
  int number, width = 6;
  for (number = 1; number < 9999999; number *= 7) {
    int digits = printf("%d", number);
    if (digits < width) printf("%0*d", width-digits, 0);
    puts("");
  }
  return 0;
}

См. Код, работающий на http://ideone.com/TolIv

0 голосов
/ 25 ноября 2011

Как сказал Лучиан, такое поведение не поддерживается в printf, в отличие от гораздо более распространенного обратного (левого) заполнения. Однако вы могли бы достаточно легко сгенерировать запрошенный результат примерно так:

char *number_to_six_digit_string(char *resulting_array, int number)
{
    int current_length = sprintf(resulting_array, "%d", number);
    while (6 > current_length) {
        resulting_array[current_length++] = '0';
    }
    resulting_array[current_length] = '\0';
    return resulting_array;
}

и затем вы можете напечатать результат:

char my_number[7];
printf("my number is %s, other stuff\n", number_to_six_digit_string(my_number, 13));
0 голосов
/ 25 ноября 2011

Вы не можете сделать это напрямую с помощью printf (по крайней мере, в соответствии со стандартами), вам нужно заранее изменить свои номера.

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