2016-11-26 48 views
0

我有一個是這樣定義的類型節點的單鏈表:C++ 11 QtCreator:長整型不能正確讀入變量

struct Item { 
    long date; 
    bool isPaid; 
}; 
struct Node{ 
    Item item; 
    Node* next; 
}; 

其中「日期」是一個字段,將採取的形式「ddmmaaaa」(即,當天的前兩位數字,本月的後兩位數字,本年度的最後四位數字)。 然而,當我嘗試添加幾個節點,我得到插入不同數量:

newItem=new Node; 
newItem->item.date=01062016; 
newItem->item.isPaid=true; 
newItem->next=nullptr; 
list=insertItem(list, newItem); 

(insertItem是我的函數,它接受一個指向列表頭,一個指向一個新的節點,插入節點在列表中)。

我得到正確的號碼,如果我嘗試類似13042016分配給長字段:

this is right

然而,當我嘗試分配01062016,我得到287758代替:

this is wrong我不想使用不同的方法(我知道日期的事情很奇怪,我只是需要這種方式)。我不想使用不同的方法(我知道日期的事情很奇怪,我只是需要它)。只有當我添加一個完全適合長變量的日期時,才能理解爲什麼我會得到奇怪的數字。 我使用的是基於Qt 5.1.0的Qt Creator 2.7.2。

+0

使用'long'作爲一種類型是錯誤的。如果你知道你需要64位,使用'qint64'或'int64_t'。基本上,如果一個'int'不會削減它,你需要使用一個給定大小的可移植類型。 –

回答

4

因爲010620160開頭,但不是0x因此它是一個八進制數,它與十進制中的287758等效。

參見Integral Literal

八進制文字是數字零(0),接着是零個或更多八進制數字(0,1,2,3,4,5,6,7)