我遇到了这个错误:
int temp = 0789;
error C2041: illegal digit '8' for base '8'
我能理解的是编译器将任何以0开头的数字理解为像0123一样是八进制的。但是我如何告诉编译器只需要使用前面的0?
答案 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;