C/C++八进制赋值与输入常见陷阱

在C语言及C++中,一个整形数值前如果有一个数字0,则代表该整形数值为八进制数。例如int a,a = 010,则a的十进制数值为8,八进制数值为10。但是在输入a的时候,输入010,如果用scanf(“%d”,&a),则将会被当做十进制10识别。而在c++中使用cout<<a时,也将会被默认为十进制输入。以下是测试用例。

1
2
3
4
5
6
7
8
9
10
#include<iostream>  
using namespace std;
int main() {
int a = 010;
cout <<"将010赋给a时:a = "<< a << endl;
cout << "请输入a:";
cin >> a;
cout << "将010输入给a时:a = " << a;
return 0;
}

img

由此可知,cout默认是以十进制进行输入的。因此,我们在赋值与输入时,得格外注意进制之间的转换。例如:

1
2
3
4
5
6
7
8
struct temp{  
int a;
int b;
int c;
}temp_1 = { 001,
010,
222
};

我们经常会在赋值时为了将数值对齐显得美观而在数值之前添加0,这样往往会导致得到的结果错误,因为系统将之默认为八进制赋值。


文章结束了,但我们的故事还在继续
坚持原创技术分享,您的支持将鼓励我继续创作!