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

本文探讨了C语言及C++中八进制数值的表示方法及其潜在的问题。特别是当在变量赋值时前面加上0时,系统会将其误认为八进制数,导致预期之外的结果。文章还提供了一个示例代码,展示了这一现象并提醒开发者们在赋值时要格外小心。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

struct temp{
    int a;
    int b;
    int c;
}temp_1 = { 001,
            010,
            222
           };
我们经常会在赋值时为了将数值对齐显得美观而在数值之前添加0,这样往往会导致得到的结果错误,因为系统将之默认为八进制赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值