学习笔记 | C 语言中的输入/输出
最编程
2024-04-10 14:37:30
...
printf
- printf(print format) 按照指定格式打印
- printf 并不会在行尾自动加上换行
- printf 必须包含头文件
占位符
占位符,就是这个位置可以用其他值代入。
输出的文本中可以有多个占位符。
占位符以“%”开头,第二个字符表示“占位类型”。如 %d
,表示整数占位符。
代码示例:
int main()
{
int money = 5;
printf("我要定个小目标,先赚个 %d 个亿\n",money);
return 0;
}
代码执行结果
占位符表格
占位符 | 描述 |
---|---|
%a : |
十六进制浮点数,字母输出为小写。 |
%A : |
十六进制浮点数,字母输出为大写。 |
%c : |
字符。 |
%d : |
十进制整数。 |
%e : |
使用科学计数法的浮点数,指数部分的 e 为小写。 |
%E : |
使用科学计数法的浮点数,指数部分的 E 为大写。 |
%i : |
整数,基本等同于 %d 。 |
%f : |
小数(包含 float 类型和 double 类型)。 |
%g : |
6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e为小写。 |
%G : |
等同于 %g ,唯⼀的区别是指数部分的 E 为大写。 |
%hd : |
十进制 short int 类型。 |
%ho : |
八进制 short int 类型。 |
%hx : |
十六进制 short int 类型。 |
%hu : |
unsigned short int 类型。 |
%ld : |
十进制 long int 类型。 |
%lo : |
八进制 long int 类型。 |
%lx : |
十六进制 long int 类型。 |
%lu : |
unsigned long int 类型。 |
%lld : |
十进制 long long int 类型。 |
%llo : |
八进制 long long int 类型。 |
%llx : |
十六进制 long long int 类型。 |
%llu : |
unsigned long long int 类型。 |
%Le : |
科学计数法表⽰的 long double 类型浮点数。 |
%Lf : |
long double 类型浮点数。 |
%n : |
已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。 |
%o : |
八进制整数。 |
%p : |
指针。 |
%s : |
字符串。 |
%u : |
无符号整数(unsigned int)。 |
%x : |
十六进制整数。 |
%zd : |
size_t 类型。 |
%% : |
输出⼀个百分号。 |
限定宽度
%5d 表示限定宽度,若实际长度大于5时,按原样打印。
%5d 宽度不够 5 时,左边补齐空格,形成右对齐效果。
%-5d 宽度不够 5 时,右边补齐空格,形成左对齐效果。
所以,%nd,可以理解为限定最小宽度。
int main()
{
printf("%d\n", 123);//打印 123
printf("%5d\n", 123);//左边补齐2个空格,形成右对齐效果
printf("%5d\n", 1234567);//实际长度大于5,原样打印
// 观察左对齐
printf("------我是分割线------\n");
printf("%-5d", 123);//左对齐之后,右边有另个空格
printf("%5d\n", 123);//右对齐之后,左边有两个空格
// 加起来中间会有 4 个空格
//打印数字为小数时
printf("------我是分割线------\n");
printf("%f\n", 123.45);
printf("%12f\n", 123.45);
return 0;
}
执行结果
%+d 总是显示正负号
int main()
{
printf("%+d\n", 123);
return 0;
}
执行结果
限定小数位
int main()
{
printf("%f\n", 123.45); //默认打印小数点后六位
printf("%.2f\n", 123.45);//2f 只打印小数点后两位
printf("%6.2f\n", 12.45);//%6.2f 总共输出 6 位,小数点后保留 2 位。
printf("%*.*f\n", 6,2,12.45);//同上,* 可以把参数传进去。
return 0;
}
执行结果
输出部分字符串
int main()
{
//printf(%.[m]s);
printf("%.5s\n","Hello Word");//只输出前五个字符
return 0;
}
执行结果
scanf
scanf必须提前知道数据类型,才可以进行数据处理
#define _CRT_SECURE_NO_WARNINGS 1
int main()
{
int score = 0;
//输入
scanf("%d",&score);//&为取地址
//输出
printf("%d",score);
return 0;
}
解决无法使用scanf函数问题解决如下(部分编译器会报错):
#define _CRT_SECURE_NO_WARNINGS 1 //在代码第一行添加
#pragma warning(disable:4996) //任意行添加
注意事项:
1、scanf
不要随便加换行。
2、scanf
会自动过 滤空白字符、包括空格、制表符、换行等。
scanf 的返回值
scanf()
的返回值是一个整数,表示成功读取的变量个数。
如果没有读取任何项或者匹配失败,则返回0
。
如果在成功读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量 EOF 。EOF 的本质是 -1
int main()
{
int a = 0;
int b = 0;
float f = 0.0;
int r = scanf("%d %d %f",&a,&b,&f);
printf("a = %d\n",a);
printf("b = %d\n",b);
printf("f = %f\n",f);
printf("r = %d",r);
return 0;
}
Ctrl + Z
可以终止读取。
scanf()
将字符串读入数组时,不会检测字符串是否超过数组长度。
执行结果
上一篇: 如何在 c 语言中使用占位符
下一篇: c 中的占位符数据填充