便捷的网站建设,重庆谷歌seo关键词优化,wordpress新增站点,r语言做网站凡事发生必将有益于我#xff0c;高手#xff0c;从来都不仅仅是具备某种思维的人#xff0c;而是那些具备良好学习习惯的人#xff0c;成为高手#xff0c;无他#xff0c;手熟尔#xff01;加油在最近的学习之中#xff0c;对于格式化输出这个知识点#xff0c;这里…凡事发生必将有益于我高手从来都不仅仅是具备某种思维的人而是那些具备良好学习习惯的人成为高手无他手熟尔加油在最近的学习之中对于格式化输出这个知识点这里学一点那里学一点感觉学的很杂不系统。于是我深入的去摸索这个知识点允许我今天写一篇博客来总结一下这一类知识点和大家分享一下以供大家一起学习目录一.普通的格式化输出二.特殊的格式化输出 (1)整数的格式化输出 (2)小数的格式化以及四舍五入输出 (3)字符数组的格式化取值三.sprintf的格式化输出 使用sprintf出现的内存溢出情况四.总结三类比较容易混的情况一.普通的格式化输出d //整型输出ld //长整型输出o //以八进制数形式输出整数x //以十六进制数形式输出整数或输出字符串的地址u //以十进制数输出unsigned型数据(无符号数)注意%d与%u的区别是有无符号(正负号)和数值范围(%u范围大)不同也就是极限的值不同不然数值打印出来会出错。c //用来输出一个字符s //用来输出一个字符串f //用来输出实数以小数形式输出默认情况下保留小数点6位%.5f //用来输出实数保留小数点5位e //以指数形式输出实数eg:a3e103*10^10;
注意e的前面和后面的值必须是整数g //根据大小自动选f格式或e格式且不输出无意义的零二.特殊的格式化输出(1)整数的格式化输出小知识一个C程序是默认右对齐的但是可以认为修改为左对齐形如%-d负号表示左对齐打印出来的内容是向左边靠拢对齐的。%d(加号可省略)打印出来的内容是向右边靠拢的。直接上代码int main() {int a 987, b 987654;printf(%5d\n, a); // 右对齐且最少取5位整数如果变量a多余5位则全取不足5位使用空格 左边补全;printf(%05d\n, a); // 在上一个的基础上加一个0使用0代替空格在左边补齐位数;printf(%-5d\n, a); // 左对齐不足位数使用空格补全;printf(%-05d\n, a); // 左对齐不足位数还是用空格补全;//注意这里不再补0这是因为本来是左对齐如果补0的话这个值的尾部会补一些0这个值就会发生改变建议读者和第四行的代码对比一下printf(%5d\n, b); // 变量b的值超过5位则全部取;return 0;
}运行结果如下 987
00987
987
987
987654(2).小数的格式化以及四舍五入输出直接上代码#include stdio.hint main() {double a 123.456, b 21.12;printf(%.2f\n, a); // 取变量a的值的后2位小数且第三位四舍五入;printf(%.3f\n, b); // 取变量b的值的后3位小数且不足三位则用0补全;printf(%4.2f\n, b); // 取至少4位字符2位从b的左边开始取2位剩余2位整数2位小数点1位,所以三 位全部输出;printf(%7.2f\n, b); // 取至少7位字符 2位小数剩余5位整数2位 小数点1位 多出来的2位用 空格补全;//注意小数点也占一位字符;return 0;}运行结果如下123.46
21.120
21.1221.12(3).字符数组的格式化取值直接上代码#include stdio.h
#include time.hint main() {char str[50];char s[5] { a, b, c };printf(%s\n, s); // 打印完整的字符数组字符串printf(%2s\n, s); // 打印至少2个字符printf(%5s\n, s); // 打印至少5个字符不足的用空格在左边补齐printf(%-5s\n, s); // 打印至少5个字符不足的用空格在右边补齐printf(%4.2s\n, s); // 总共输出4个字符但是有2个需要在s1里面从左取剩余的字符用空格默认在左边补全printf(%.2s\n, s); // 总共输出2个字符这2个字符从s1里面的左边开始取return 0;
}运行结果如下abc
abcabc
abc ab
ab三.sprintf的格式化输出该函数的原型为int sprintf(char *str, const char *format, [argument,...]);1str : 这是指向一个字符数组的指针该数组存储了 C 字符串;2format:是字符串嵌入的标签(用%d或%f等代表的标签);3argument部分可以包含任意多个只要format中有对应的标签表示;4加const是为了防止对format对应的内容误操作另外要注意以下三点(1) 该函数包含在stdio.h的头文件中;(2) sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中要注意字符串的 长度要足够容纳打印的内容否则会出现内存溢出);(3)printf函数打印输出到屏幕上, sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用 广泛;直接上代码#include stdio.hint main() {char str[30];double a 123.123456, b 90.12;sprintf(str, 获取的小数为%.2f\n, a); // 此处只是把双引号中的字符串赋值给str数组注意打印 书来的a的值也算双引号中的字符串并没打印到屏幕printf(%s\n, str); //打印出字符串str里面的内容;//注意sprintf函数本身是不打印的;sprintf(str, %.2f----%6.2f\n, a, b); // 把2个小数拼接到一个字符串中printf(%s\n, str);}运行结果如下获取的小数为123.12
123.12---- 90.12 // 注意此处需要打印6位而b总共才5位需要1位空格补全使用sprintf出现的内存溢出情况字符数组定义的时候过于小导致的异常情况四.总结三类比较容易混的情况%m.nd:m代表输出一共占m列不够m列前面补空格够m列不作任何处理n代表这个数一共要有n列不够前面补0够n列不做任何处理。int main()
{int a 123;printf(%.4d\n,a);printf(%5d\n, a);printf(%5.4d\n, a);return 0;
}运行结果如下01231230123%m.ns:m代表这个字符串一共输出m列n代表取这个字符串前n个元素输出到整个m列的右侧当nm时用空格补齐左边的余缺当nm时不做处理int main()
{char*s hello world;printf(%5.3s\n,s);printf(%6.7s\n,s);printf(%.2s\n,s);return 0;
}
hel
hello w
heint main()
{float a 1.25;printf(%5.1f\n,a);printf(%.4f\n,a);printf(%4.3f\n,a);return 0;
}1.3
1.2500
1.250%m.nf:m代表这个数一共要输出m列包括小数点和小数的位数n代表小数的个数当浮点数的小数小于n时采用四舍五入,大于时后面补0。 2023.02.21 From:努力进大厂的新青年