C++11 QtCreator:长整数未正确读入变量

Posted

技术标签:

【中文标题】C++11 QtCreator:长整数未正确读入变量【英文标题】:C++11 QtCreator: long integer not correctly read into variable 【发布时间】:2016-11-26 15:23:43 【问题描述】:

我有一个 Node 类型的单链表,定义如下:

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 的内容分配给长字段,我会得到正确的数字:

但是,当我尝试分配 01062016 时,我得到了 287758:

我不想使用不同的方法(我知道日期很奇怪,我只是需要这种方式)。只是为了理解为什么当我添加一个完全适合长变量的日期时会得到奇怪的数字。 我正在使用基于 Qt 5.1.0 的 Qt Creator 2.7.2。

【问题讨论】:

long 用作类型是错误的。如果您知道自己需要 64 位,请使用 qint64int64_t。基本上,如果int 不能削减它,您需要使用给定尺寸的便携式类型。 【参考方案1】:

因为010620160 开头而不是0x 因此它是一个八进制数,它与十进制的287758 等价。

见Integral Literal:

octal-literal 是数字零 (0) 后跟零个或多个八进制数字 (0, 1, 2, 3, 4, 5, 6, 7)

【讨论】:

以上是关于C++11 QtCreator:长整数未正确读入变量的主要内容,如果未能解决你的问题,请参考以下文章

c++11新特性:变长参数模板详解

在c语言中 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是?

C++11 自动。从浮点数转换为长整数

C语言如何把11位16进制字符串转成16进制数?

Qt Creator 中的 C++11 IDE 支持? [复制]

读入字符并创建数组c ++