你真的懂printf吗?
本帖主要是以代码的形式讲述printf();的诸多用法。
printf用法总结
/*
*printf();
*一般形式:printf("格式控制",输出表);
* %[-][0][m][.n][l]格式字符
* - 输出的数字或者字符以左对齐,右边填充空格
* 0 输出的空位用0来填充
* m (正整数)输出数据的字段宽度。实际位数多于m,按实际的输出,少于m则补空格或者补零
* .n (正整数)对实数,表示输出n位小数;对字符串,表示截取的字符串个数
* l (字母)输出长整型整数
*/
图片展示:
基本用法
/*
*Copyright (c) 2019.池州市集成电路可靠性分析与嵌入式研究实验室
*All rights reserved.
*摘要:程序功能,列举出printf, sprintf, fprintf的用法,以及各种数据类型的输出
*文件名称:数据交换.c
*文件标识:无
*
*当前版本:v1.0
*作者:乔勇刚
*完成日期:2019/09/08
*
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
printf("hello world");
printf("\na=%d,str=%s", 10, "1526edf"); //输出到文件,输出到命令行,输出到网页
printf("\nc=%d,\n", 10); //实际上printf打印的就是字符串,只不过cpu先将10映射到%d里面,在输出
system("pause");
}
图片展示:
拓展用法1
void main(void)
{
char inputstr[10] = "0";
char strall[30] = "0";
char cmdstr[30] = "color";
scanf("%s", inputstr);
sprintf(strall, "%s %s",cmdstr,inputstr);
//sprintf 将参数整合到字符串中 , 同样也可以是实现字符串的拼接
//%s%s 拼接
//%.2s只能从左边截取
system(strall);
printf("\n%s\n", strall);
system("pause");
}
图片展示:
拓展用法2
void main(void)
{
printf("\n%d", 10); //有多宽,显示多宽
printf("\n%10d", 10); //位宽是10 ,右对齐
printf("\n%-10d", 10); //左对齐
printf("\n%-010d", 10);
printf("\n%010d", 10);
printf("\n%3d", 123456); //原方式显示,不会截取
printf("\n%3s", "123456");
printf("\n%.3s", "1234565"); //截取字符串
printf("\n%.3f", 12.34565); //截取小数点后的数据
system("pause");
}
图片展示:
拓展用法3
void main(void)
{
int num = 123456789;
printf("\n%d", num); //有符号十进制
printf("\n%i", num); //有符号十进制
printf("\n%u", num); //无符号十进制
printf("\n%o", num); //无符号八进制
printf("\n%x", num); //无符号十六进制
system("pause");
}
图片展示:
拓展用法4
void main(void)
{
char ch = 'a';
printf("%c\n", ch); //字符输出
// printf("%s\n", ch); //字符输出
putchar(ch);
putchar('\n');
char str[20] = "calc"; //字符串输出
printf("%s\n", str);
system("pause");
}
图片展示:
拓展用法5
void main(void)
{
double db = 1234567812;
printf("%e", db);
//数据总数占据12位,+代表10几次方,-代表10的负几次方
printf("\n%g", db);
/*
根据数值的大小,输出最小位宽的数字,可能是%f形式,
也可能是%e形式且不输出没用的0
*/
system("pause");
}
图片展示:
拓展用法6
void main(void)
{
printf("%d,%d,%d,%d\n", sizeof(short int), sizeof(int), sizeof(long), sizeof(long long));
//输出的是多少个word ,一个word八个位。
{
unsigned short int unum = 65535;
//16位存储 短整型的范围 2e+16-1 2的16次方减1 635535
short int num = 65535;
printf("%hu,%hd\n", unum, num);
}
//不同的块语句里面相互独立,不会产生重定义
{
unsigned int unum = 65535;
int num = 65535;
printf("%u,%d\n", unum, num);
}
{
unsigned long unum = 65535;
long num = 65535;
printf("%lu,%ld\n", unum, num);
}
{
unsigned long long unum = 65535;
long long num = 342425199801164014;
printf("%llu,%lld\n", unum, num);
}
system("pause");
}
图片展示:
拓展用法7
void main(void)
{
//int num = 0128;
//0开头代表是八进制,但是八进制中最大位数字不能超过8
int num = 0127;
printf("%o", num);
printf("\n%#o", num);
int data = 0x1234a;
printf("\n%x", data);
printf("\n%#x", data);
//所以我们再看进制的时候,需要在%好号后面加上#号,表示不同的进制
system("pause");
}
图片展示:
拓展用法8
void main(void)
{
//printf("%D", 10); //%d不能大写
//printf("%O", 010); //%o不能大写
//printf("%U", 010); //%u不能大写
//printf("%#X", 0X10); //%x能大写
printf("%E\n", 123456789.0);// %e能大写
//有字母输出的可以大小写,没有字母,只有数字的不能大小写
//printf不会帮你完成数据转化,需要精确匹配
printf("\"123\"\n");
//转义字符"\"
printf("\"123%%%%\"\n"); //只会显示连两个“%”
system("pause");
}
图片展示:
拓展用法9
void main(void)
{
double db = 1.234567890123456789;
for (int i = 1; i < 20; i++)
{
printf("\n %.*f", i, db);
//* 号可以代替i的变量 一个不确定的量用“*”
}
char str[100] = "1.234567890123456789";
for (int i = 1; i < 20; i++)
{
printf("\n %.*s", i, str);
//* 号可以代替i的变量 一个不确定的量用“*”
}
system("pause");
}
图片展示: