《C语言程序设计进阶》7.1.1格式化输入输出

格式化输入输出

printf

%[flags][width][.prec][hlL]type

测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(int argc, char const* argv[])
{
printf("%9d\n", 123);
printf("%-9d\n", 123); // 左对齐
printf("%+9d\n", 123); // 正数强制输出+号
printf("%+-9d\n", 123);
printf("%-+9d\n", 123);
printf("%+-9d\n", -123); // 负数无法输出+号
printf("%-+9d\n", -123);

return 0;
}


测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(int argc, char const* argv[])
{
int len = 6;
printf("%9.2f\n", 123.0); // 整个输出占据9个位置,非指小数点前面9位
printf("%*d\n", 6, 123); // 等价于把*号替换成6
printf("%*d\n", len, 123); // 可以是变量

int len1 = 9, len2 = 2;
printf("%*.*f\n", len1, len2, 123.0);

return 0;
}


测试一下

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(int argc, char const* argv[])
{
printf("%hhd\n", 123); // 123的十六进制数是7B
printf("%hhd\n", 12345); // 12345的十六进制为0x3039(两个十六进制的数字可以表示8位,即一字节)
// 0x2039的低位0x39表示一字节,而0x39的十进制数为57
printf("%hhd\n", (char)12345); // 等价于强制类型转换
printf("%hhd\n", (char)123); // 等价于强制类型转换

return 0;
}


测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(int argc, char const* argv[])
{
_set_printf_count_output(1); // 用于解禁%n,因VS2019出于安全性考虑,禁用%n
int num1, num2, num3;
printf("%d%n\n", 12345, &num1); // 取地址符&
printf("%d\n", num1);
printf("%dty%n\n", 12345, &num2);
printf("%d\n", num2);
printf("%hhd%n\n", 12345, &num3);
printf("%d\n", num3);

return 0;
}

scanf

%[flag]type

测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(int argc, char const* argv[])
{
int number;
scanf("%hhd", &number); // 试着输入97,即a的ASCII码
printf("%c\n", number); // 按字符输出

int num;
scanf("%*d%d", &num); // %*跳过
printf("%d\n", num);
scanf("%1d", &num); // 最大字符个数
printf("%d\n", num);

return 0;
}


其中[...]的一种用法如下

printf和scanf的返回值

  • scanf返回读入的项目数
  • printf返回输出的字符数
  • 在要求严格的程序中,应该判断每次调用scanfprintf的返回值,从而了解程序运行中是否存在问题

测试一下

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main(int argc, char const* argv[])
{
int num;
int i1 = scanf("%i", &num);
int i2 = printf("%d\n", num);
printf("%d : %d\n", i1, i2); // 如输入1234,结果为1 : 5,5是因为包含最后的换行符

return 0;
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2021 zhangguoliu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信