为什么在int变量的开头为零会产生错误?

时间:2015-05-26 03:22:52

标签: c++ octal

#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中看到无效数字之类的错误时。如果零是第一个数字,它会为#34; mobno&#34;(在结构中)的值打印错误的值,但它给出了在程序结束时将零用作num的第一个数字时出错。是否有人会为我解释?

2 个答案:

答案 0 :(得分:4)

在C / C ++中以0开始整数文字意味着您打算在octal或base-8中解释它。

因此,例如,数字'034'将被解释为3 * 8 ^ 1 + 4 * 8 ^ 0 = 3 * 8 + 4 * 1 = 28.因此它等于'28'。

整数文字'09'无效,因为'9'不是八进制数字。

答案 1 :(得分:1)

<强> 2.14.2 整数文字

  

整数文字可以有一个前缀,用于指定其基数和a   后缀,指定其类型。 [...]八进制整数文字(基数为8)以数字0开头   并由一系列八进制数字组成。

以八进制计数将是:

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

因此,编译器会接受89作为八进制数的一部分。