2015-05-26 3 views
-1
#include <iostream> 
using namespace std; 
int main() 
{ 
    struct information 
    { 
     string name; 
     string bloodgroup; 
     int  mobno; 
    }; 

    information person1={"Ali Hamza","O-",434233434}; 
    information person2={"Akram Ali","B",034}; 
    cout << endl << person1.name << endl; 
    cout << person1.bloodgroup << endl << person1.mobno<< endl; 
    cout << endl << person2.name << endl << person2.bloodgroup << endl << person2.mobno<<endl; 

    int num = 09; 
    cout << num; 

    return 0; 
} 

Интересно, когда я видел ошибки, такие как неверная цифра в восьмеричной константе 9 и 8. Также печатайте неправильное значение для значения «mobno» (по структуре), если ноль является первой цифрой, но он дает ошибку, когда ноль используется в качестве первой цифры для num в конце программы. Есть ли кто-нибудь, кто объяснит это мне?Почему нуль в начале переменной int дает ошибку?

+0

Цифры 8 и 9 не являются восьмеричными цифрами. –

ответ

4

Запуск целочисленного литерала с 0 в C/C++ означает, что вы намерены интерпретировать его в octal или base-8.

Так, например, число «034» должно интерпретироваться как 3 * 8^1 + 4 * 8^0 = 3 * 8 + 4 * 1 = 28. Таким образом, это эквивалентно «28».

Целый литерал '09' недействителен, так как '9' не является цифрой в восьмеричном.

1

2.14.2 Целочисленные литералы

Целое число буквальным может иметь префикс, который определяет его основание и суффикс, который определяет его тип. [...] Восьмеричный целочисленный литерал (базовая восьмерка) начинается с цифры 0 и состоит из последовательности восьмеричных цифр.

Подсчет в восьмеричной будет:

01, 02, 03, 04, 05, 06, 07, 10 

Поэтому компилятор действительно принимает 8 или 9 как часть восьмеричного числа.