布尔型

第一位是0则表示false

否则表示true(1)

补充

==auto== 可自动推导类型

1
2
3
4
5
auto var_i = 1;
auto var_c = 'a';
auto var_b = true;
auto var_d = 3.14;
cout << typeid(var_i).name() << endl;//输出i,其余同理输出对应数据类型

输出数据

printf

数字类型

1
2
3
int d = 255;
printf("%d\n", d);//%d 十进制;%o 八进制;%x 十六进制;
//在前面加上# 即可输出对应进制 如 "%#x\n",d 输出得到0xff 表示16进制(八进制前跟0;十六进制前跟0x)

printf中输出不同大小的整形时,需要在类型前加大小修饰符

short long longlong

1
2
long long lld = 2147486948;
printf("%lld\n", lld)

字符型

printf输出字符型用%c

输出宽度

1
2
printf("%7d|\n", d);//右对齐
printf("%-7d|\n" d);//左对齐

cout

数字类型

C++中进行优化

1
2
3
4
5
6
7
8
9
cout << oct;
//cout << dec; 十进制
//cout << hex; 十六进制
//cout << uppercase; 十六进制字母显示为大写(nouppercase小写)
//cout << showbase; 数字前显示进制符号
cout.setf(ios::oct, ios::basefield);
cout.flag(ios::oct);
#include <iomanip>
cout << setbase(8);

字符型

cout直接输出字符型 cout << c << endl;

fixed pre

cout.precision();限制的是输出数字的个数

加上cout << fixed; 限制则是输出小数点后的个数

输出宽度

1
2
3
cout.width(7);
cout << d << '|' << endl;//仅生效一次 默认右对齐
cout << left;//来控制左右
1
2
3
4
 cout.width(3);
cout.fill('0');
cout << res;
//cout输入3位,不足3位时补0,例如res = 8,输出008

format(C++ 20 新特性)

数字类型

C++ 20 取二者之长

format

cout << format(“{}”, c) << endl;

fixed pre format

输出宽度

1
2
cout << format("{:>7}|", d) << endl;
// >右对齐 <左对齐 ^居中对齐

总结

sum up

补充sprintf

sprintf 是一个在 C 和 C++ 语言中使用的函数,它属于标准库中的输入/输出部分。sprintf 函数的作用是将格式化的数据写入一个字符串中,类似于 printf 函数,但它将输出写入一个字符串变量而不是直接输出到控制台。

1
int sprintf(char *str, const char *format, ...);
  • str:指向目标字符串的指针,sprintf 会将格式化后的字符串存储在这里。
  • format:格式化字符串,它指定了后续参数如何被格式化和插入到最终的字符串中。
  • ...:可变参数列表,这些参数将根据 format 字符串中的格式说明符被格式化并插入到字符串中。

sprintf 的使用示例:

1
2
3
4
char buffer[100];
int num = 42;
sprintf(buffer, "The answer is %d", num);
// 此时 buffer 包含了字符串 "The answer is 42"

在上面的例子中,%d 是一个格式说明符,它告诉 sprintf 将一个整数转换成字符串并插入到 buffer 中。

在下面这个例子,sprintf很好的处理的时间点小于0的问题,将3:30补充为03:30。

1
2
3
4
5
6
7
8
string getstr(int a, int b) {
char buf[3];
sprintf(buf, "%02d", a);
string h(buf);
sprintf(buf, "%02d", b);
string m(buf);
return h + ":" + m;
}

需要注意的是,sprintf 存在安全风险,因为它可能导致缓冲区溢出,如果格式化后的字符串长度超过了 buffer 的大小。因此,在实际编程中,推荐使用 snprintf 函数,它允许你指定目标缓冲区的最大长度,从而避免溢出:

1
int snprintf(char *str, size_t size, const char *format, ...);

size 参数指定了 str 缓冲区的最大长度,snprintf 会在达到这个长度之前停止写入,并且总是以空字符结尾。这样可以更安全地避免缓冲区溢出的问题。