printf()相关函数的学习
printf()函数作为c/c++学习的基本函数,其中有着很多小门道!首先看一下printf()函数的源代码。
printf(
_In_z_ _Printf_format_string_ char const* const _Format,
...)
函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。
printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%“开始, 后跟一个或几个规定字符, 用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出 参数个数一样多, 各参数之间用”,"分开, 且顺序一一对应, 否则将会出现意想 不到的错误。
符号在printf()使用
printf()函数必定会用到符号,先来学习一下符号这个东西,这是个好东西,真香!
转换说明 输出
%a (%A) 浮点数,十六进制数字和 p- P-记数法 (C99)
%c 一个字符
%d 有符号十进制整数
%e (%E) 浮点数 e- E- 记数法
%f 浮点数,十进制记数法
%g (%G) 根据数值不同自动选择 %f 或 %e。 %e格式在指数小于-4 或者大于等精度时使用
%i 有符号十进制整数 (与 %d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x (%X) 使用十六进制数字 0f 0F 的无符号十六进制整数
%% 打印一个百分号
hello word ,带我走进printf();
#include<iostream>
using namespace std;
int main()
{
const char s[12] = "hello word!";
printf("%s\n", s);
return 0;
}

所以我们程序中%s正是Format,意义在于告诉我们打印的是一个字符串,如果我想打印一个字符呢!!!于是printf()改成:
printf("%c %s\n",'C',s);

当然我输入的是C肯定就是C!!!但是相反有这样一个问题出来!
我改写成成这样:
printf("%c %s\n",66,s);

当然这就是ASCII问题了!
接下来符号学习中有了新的问题“%d”符号在输出十进制数字时正常输出是这样:
printf("%d %s\n",66,s);

当我把printf()做进一步的修改时:
printf("%4d %s\n",55,s);

由此我知道了4这个数据可以改变输出字符的宽度,并且向右对齐。
如果我在哪里加个小数点会怎么样!
printf("%4.5d %s\n",55,s);
printf("%4.3d %s\n", 55, s);

这样可以得出这个小数点前的数是使得输出数据的宽度并且向右对齐,后面这个数据是在数据前多的位用0补充。
如果我把printf()改成这样
printf("%-4.5d %s\n",55,s);
printf("%-4.3d %s\n", 55, s);

呈现出左对齐的现象!!!
printf()的兄弟姐妹
- printf()
printf(
_In_z_ _Printf_format_string_ char const* const _Format,
...)
- printf_s()
printf_s(
_In_z_ _Printf_format_string_ char const* const _Format,
...)
- sprintf()
sprintf(
_Pre_notnull_ _Post_z_ char* const _Buffer,
_In_z_ _Printf_format_string_ char const* const _Format,
...)
- sprintf_s()
sprintf_s(
_Out_writes_z_(_BufferCount) char* const _Buffer,
_In_ size_t const _BufferCount,
_In_z_ _Printf_format_string_ char const* const _Format,
...)
#include<iostream>
using namespace std;
#define NUM 256
int main()
{
char buff[NUM ];
const char* value = "Hello world!";
char* formatStr = "%s%d%d\n";
printf(formatStr, value, 10); // 可以输出“Hello world!10”
//printf_s(formatStr, value, 10); //会报错
printf_s(formatStr, value, 10, 10); //不会报错
sprintf(buff, formatStr, value, 10, 10);
sprintf_s(buff, NUM , formatStr, value, 10, 10);
return 0;
}
_s是增加了安全性,做了溢出检测,使得代码更具有安全性;
s…将输出字符串存在第一个buff里面,不会打印到显示屏上。
未完待续!!!
本文详细介绍了C++中的printf()函数,包括其基本用法、符号的使用,如%a到%%的各种转换说明,以及如何通过指定宽度和小数点控制输出格式。同时提到了printf()的兄弟函数如printf_s()和sprintf_s(),强调了它们在安全性方面的增强。
11万+

被折叠的 条评论
为什么被折叠?



