C ++非法数字,简单问题

时间:2011-01-24 04:29:06

标签: c++

我遇到了这个错误:

int temp = 0789;

error C2041: illegal digit '8' for base '8'

我能理解的是编译器将任何以0开头的数字理解为像0123一样是八进制的。但是我如何告诉编译器只需要使用前面的0?

4 个答案:

答案 0 :(得分:4)

如果你把0放在前面,它认为它是一个八进制值,因此8和9是非法数字。

答案 1 :(得分:3)

http://msdn.microsoft.com/en-us/library/00a1awxf(v=vs.80).aspx

关于此的很好的资源。

0xff是十六进制 0123是八进制的 123u未签名 ..更多......

答案 2 :(得分:2)

在数字的前面加一个0告诉编译器该值以八进制表示;八进制数字仅为0到7,因此'789'不是有效的八进制数。这里唯一的解决方案是从数字的开头删除0(假设你的数字是十进制的)....或提供一个有效的八进制数(如果你真的想使用八进制)。

好吧,我想你可以这样做:

int temp = atoi("0789");  

但这样效率会相当低,因为该值将在运行时从字符串计算,而不是直接编译。

答案 3 :(得分:1)

如果您想在前面显示零号,请执行以下操作:

int temp = 789;
std::cout << '0' << temp;

如果你想用零填充任意数字,使其为4位数,那么你可以这样做(确保包含<iomanip>

int temp = 789;
std::cout << std::setw(4) << std::setfill('0') << temp;