Проблема с целочисленным значением


person Andro Miguel M. Bondoc    schedule 08.02.2011    source источник
comment
Как использовать значение 01 в int? какая разница между this и 1 в операциях int?   -  person Saeed Amiri    schedule 08.02.2011


Ответы (6)


Поскольку вы пометили его как C ++, способ сделать это с потоками C ++ может быть следующим:

#include <sstream>
#include <iomanip>
#include <iostream>

int main() {    
    int value = 1;
    std::stringstream ss;
    ss.width(2);
    ss << std::setfill('0') << value;

    std::cout << ss.str() << std::endl; // displays '01'
}
person Simone    schedule 08.02.2011

Не путайте значение, которое хранится, с тем, как вы хотите его представить.

Вы можете просто использовать:

std::cout << std::setfill('0') << std::setw(2) << 1;

как показано в следующей полной программе:

#include <iostream>
#include <iomanip>

int main() {
    int x = 1;
    std::cout << std::setfill('0') << std::setw(2) << x << std::endl;
    return 0;
}

который выводит:

01
person paxdiablo    schedule 08.02.2011

Тип integer использует всю свою память - обычно 32 или 64 бита - для охвата максимально возможного диапазона различных целочисленных значений. Он не отслеживает никакой информации о форматировании / отображении. Следовательно, даже 32-битное значение может отслеживать около 4 миллиардов различных значений, но их отображение на экране, в файлах и т. Д. Должно определяться окружающим кодом и не является свойством самого integer. . Итак, если у вас есть целое число, вы можете выбрать форматирование при его отображении. Это можно сделать разными способами. Самый распространенный способ C ++ - использовать std::ostream и заголовок <iomanip>, который включает поддержку указания ширины поля и символа заполнения / заполнения. Для примера см. http://www.cplusplus.com/reference/iostream/manipulators/setw/, и вы можете перейти по ссылке «См. также» для setfill. Способ, унаследованный от C, ...

printf("%02d", n);

... где первый раздел строки в двойных кавычках содержит «строку формата», в которой% представляет преобразование, 0 означает заполнение, а 2 - ширину, d означает следующее десятичное / целое значение в списке аргументов.

person Tony Delroy    schedule 08.02.2011

Если вы используете printf, используйте следующий спецификатор форматирования

printf("%02d\n",myInt);

Здесь 0 после процента указывает на заполнение начальным нулем, а 2 указывает на ширину поля 2.

person Shamim Hafiz    schedule 08.02.2011

Как целое число, оно всегда будет 1. Вы можете отобразить 01 только тогда, когда снова превратите его в строку для отображения.

Лучше всего использовать printf

printf("%02d", x);
person WuHoUnited    schedule 08.02.2011

При отображении значения с помощью средства форматирования вы можете написать:

%02d

См. Справочную документацию по C ++: http://www.cplusplus.com/reference/clibrary/cstdio/printf/

person Patrice Bernassola    schedule 08.02.2011