C语言解决整数前有0的输入问题

问题

cpp中使用cin输入数字,像05,08这样的输入,并不能转换成我们预期的5和8。原因是以0开头的整数被视为八进制数,如果输入08,八进制里没有"8",会直接报错。

那如果用户一定要输入以0开头的整数,该如何解决呢?

解决方案

字符串转换

atoi函数

$atoi$ 函数是c语言就有的函数,可以把字符串转换为int整数。

原型为 int atoi(const char *str)

工作原理:调用atoi时,从左开始扫描字符串,遇到首个非空字符且为数字或字符号开始转换,直到遇到非数字字符或’\0’时停止,并返回转换后的整数,其余情况返回0。

正常用法:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main()
{
    char a[]=" 0122 d";
    cout<<atoi(a);
    return 0;
}

返回$122$

不当用法:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main()
{
    char a[]=" -+0122 ";
    cout<<atoi(a);
    return 0;
}

默认返回$0$

相似的函数还有:

  • itoa()

    将整数转为字符串

  • atof

    将字符串转为浮点型

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计