一、基础格式控制:
%d // 十进制整数,decimalism
%o // 八进制整数,octonary
%x // 十六进制整数,hexadecimal
%c // 字符,character
%s // 字符串,character string
%f // 单精度浮点数,float
%p // 输出地址、输出指针的值,pointer
二、基本转义字符
\n - 换行符。将光标移动到下一行的开始位置。******
\t - 水平制表符。通常会将光标移动到下一个制表位。
\a - 警报声。发出警报声。
\b - 退格。将光标向后移动一个字符的位置。
\f - 换页。跳转到下一页的开始位置。
\r - 回车。将光标移动到当前行的开始位置,但不换行。
\v - 垂直制表符。通常会将光标移动到下方的垂直制表位。
三、高级int类型格式控制符
%d int 整型
%hd short 整型,
h代表half,即一半的存储字节
%ld long 整型
%lld long long 整型
%u 无符号整型
%hu 无符号short整型
%lu 无符号long 整型
%llu 无符号long long 整型
代码示例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、整型(signed int, unsigned int)(integer)
int num1 = 100; // signed int 有符号
printf("int num1 value == %d\n", num1);
printf("int num1 size == %lu\n", sizeof(num1)); // sizeof可以计算数据返回的数据类型的大小(sizeof返回的类型是long unsigned int数据类型的)
unsigned int num2 = 200;
printf("unsigned int num2 value == %u\n", num2);
printf("unsigned int num2 size == %lu\n", sizeof(num2));
// 2、短整型(short int, unsigned short int)
printf("\n");
short num3 = 300;
printf("short int num3 value == %hd\n", num3);
printf("short int num3 size == %lu\n", sizeof(num3));
unsigned short num4 = 400;
printf("unsigned short int num4 value == %hu\n", num4);
printf("unsigned short int num4 size == %lu\n", sizeof(num4));
// 3、长整型(long int, unsigned long int) // 注意:long在32位系统下:4个字节, 64位系统下:8个字节
printf("\n");
long num5 = 500;
printf("long int num5 value == %ld\n", num5);
printf("long int num5 size == %lu\n", sizeof(num5));
unsigned long num6 = 600;
printf("unsigned long int num6 value == %lu\n", num6);
printf("unsigned long int num6 size == %lu\n", sizeof(num6));
// 4、长长整型(long long int, unsigned long long int) // 注意:long long在32位系统、64位系统下:都是8个字节
printf("\n");
long long num7 = 700;
printf("long long int num7 value == %lld\n", num7);
printf("long long int num7 size == %lu\n", sizeof(num7));
unsigned long long num8 = 800;
printf("unsigned long long int num8 value == %llu\n", num8);
printf("unsigned long long int num8 size == %lu\n", sizeof(num8));
}
四、float
%f // 单精度浮点型
%lf // 双精度浮点型
%Lf // 长双精度浮点型
%6.1f // 右对齐并占用宽度为6,保留一位的小数的浮点数
%e,%E 转换浮点数为十进制指数记法。 // 比较少用 1234 == 1.234*10的3次方
%a,%A 转换浮点数为十六进制记法。 // 基本不用
%g,%G 转换浮点数为十进制小数或十进制指数记法,依赖于值和精度。 // 基本不用
代码示例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、单精度浮点型
float f1 = 3.14;
printf("f1 = %f\n", f1);
printf("f1 = %10.1f\n", f1); // 正数10表示右对齐(即一共打印10个数据,数据靠右, 左对齐默认(或加个-(负数)))
// .1表示打印的数据只保留1位小数
printf("f1(size) == %lu\n", sizeof(f1));
// 2、双精度浮点型
printf("\n");
double f2 = 114.114;
printf("f2 = %lf\n", f2);
printf("f2 = %-10.1lf\n", f2);
printf("f2(size) == %lu\n", sizeof(f2));
// 3、长双精度浮点型(32位系统:12个字节, 64位系统:16个字节)
printf("\n");
long double f3 = 6.18;
printf("f3 = %Lf\n", f3);
printf("f3 = %-10.1Lf\n", f3);
printf("f3(size) == %lu\n", sizeof(f3));
// 笔试题
if (f1 == 3.14) // 小数常量,默认是以64位(8个字节)内存来存放的 (float型的精度是32位(4个字节), 小数常量的精度是64位(8个字节),不够数据比较,所以不等)
{
printf("f1 等于 3.14\n");
}
else
{
printf("f1 不等于 3.14\n");
}
if (f2 == 114.114) // double型的精度是64位(8个字节), 小数常量的精度是64位(8个字节),数据刚好够比较,所以相等
{
printf("f2 等于 114.114\n");
}
else
{
printf("f2 不等于 114.114\n");
}
if (f3 == 6.18) // long double型的精度是16个字节, 小数常量的精度是64位(8个字节),数据足够比较,所以相等
{
printf("f3 等于 6.18\n");
}
else
{
printf("f3 不等于 6.18\n");
}
return 0;
}
五、字符型(char ) 一字节的int型
%c // 单个字符型
%o // 八进制
%x // 十六进制
%#o // 输出带有0前缀的的八进制数 012
%#x, // 输出带有0x前缀的十六进制数 0x12
代码示例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、打印字符(字符 == 单字节的整型数)
char ch1 = 'a'; // 单引号表示字符
char ch2 = 105; // 可以直接给字符类型赋整型数(因为字符类型本质上就是一个整型数(单字节))
int ch3 = 106;
printf("ch1 == %d\n", ch1); // 将这个字符变量ch1,以十进制数形式输出
printf("ch2 == %c\n", ch2); // 以字符形式,打印这个ch2变量的值
printf("ch3 == %c\n", ch3); // 以字符形式,打印这个ch3变量的值
// 2、字符打印格式(其它格式)
char ch4 = 88;
printf("ch4(字符) == %c\n", ch4); // 打印字符
printf("ch4(十进制) == %d\n", ch4); // 打印十进制数据
printf("ch4(八进制) == %o\n", ch4); // 打印八进制数据
printf("ch4(十六进制) == %x\n", ch4); // 打印十六进制数据
printf("ch4(八进制) == %#o\n", ch4); // 打印八进制数据
printf("ch4(十六进制) == %#x\n", ch4); // 打印十六进制数据(0123456789abcdef,小写)
int num = 110110;
printf("ch4(十六进制) == %#X\n", num); // 打印十六进制数据(0123456789ABCDEF,大写)
return 0;
}