2016-11-26 32 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)