2012-06-27 5 views
1

В C++ будут ли они быть любой ошибкой, если мы вводим целое число, содержащее ведущие zereos.ввод, содержащий ведущие нули

для например:

int a; 
cin>>a; 

мы даем входной 00 или 01.

или inputing с помощью строки для этого является лучшей идеей.

+4

Я не вижу трудностей в его попытке. – chris

+1

Вам нужно сохранить ведущие нули? – jxh

+0

Я попытался и кажется, что therir не является ошибкой, но просто хотел проверить – user1484638

ответ

4

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

+0

как насчет восьмеричных или шестнадцатеричных литералов? – juanchopanza

+0

, но если мы будем вводить 0001 или 0022, оно будет содержать 1 и 22 – user1484638

+0

@juanchopanza Нет и нет, только фактическое число хранится в целочисленном или поплавком. В двоичных данных, хранящихся в памяти, нет понятия «ведущие нули». –

0

Ведущие нули будут обрезаны. Он не будет храниться в памяти.

3

В C++ их будет любая ошибка, если мы введем целое число, содержащее ведущие zereos.

Возможно, вы не получите то, что ожидаете, в зависимости от настроек флагов формата входного потока. По умолчанию предполагается, что пользовательский ввод всегда будет десятичным. Ведущие нули не влияют. Что, если мы отключим это, позвонив std::cin.unsetf()?

int main() { 
    int i; 
    std::cin.unsetf (std::ios::dec); 
    while (std::cin >> ii) { 
    std::cout << i << "\n"; 
    } 
} 

Выход будет 25, если ввести 25, но если ввести 025 выход 21. Это потому, что C++ в настоящее время интерпретирует ведущий ноль на входе означает число, которое следует в восьмеричном виде (или в шестнадцатеричном в случае ведущего 0x или ведущего 0X).

Смежные вопросы