3 格式化输入输出
3.1 printf()函数:格式控制 % - 0 m.n l或者h
1 %转换开始位置(占位符)
2 – 左对齐,默认右对齐
3 0 表示空位填0(也可以是其他字符),省略表示不填零
4 m.n m表示输出总共占多少字符,n表示精度,小数点后几位默认n = 6
5 l或者 h l整数 – long 浮点数 – double h整数 – short
6 格式字符
%i或%d | int |
%hd | short int |
%ld | long int |
%u | unsigned int |
%f | float |
%lf | double |
%c | char |
%s | string |
%p | address 地址 |
%x | 十六进制 |
%o | 八进制 |
%g | 用来输出实数,它会根据数值的大小,自动选择f格式或者e格式选择输出宽度较小的一种),不输出无意义的0 |
%e | 指数形式,科学计数法 |
%hu | unsigned short格式输出整数 |
%hx | 代表以16进制的输出short类型的整数 |
#include<stdio.h>
int main()
{
double d = 2145789512;
printf("格式化输出演示:\n");
printf("09.3lf:%09.3lf,\n-9.3lf:%-9.3lf,\n5.3g:%5.3g,\n5.3e:%5.3e\n",\
3.1415926,3.1415926,d,d);
}
%d区别,在printf中无差别,scanf中,%d只匹配十进制,%i匹
配八进制,十进制,十
六进制;如何输出%:%%;
3.2 scanf
3.2 scanf
#include<stdio.h>
int main()
{
char ch[100];
printf("验证scanf的格式控制,请输入字符:\n");
scanf("%*[^a-z]%3[a-z]",ch);
printf("获取字母:%s\n",ch);
}
输入时类型一定要匹配,否则会出错
doubled=0.0
scanf("%f",&d);//前后类型不一样
scanf寻找数据的起始位置时会跳过空白字符(空格,回车,
制表符),scanf()函数返回成功输入的项数。
3.3缓冲区机制
3.3.1输入缓冲区
键盘缓冲区--->回车--->程序输入缓冲区,程序scanf从这取走数据,只取合适的,不合适的在这保存着,并没有消失,只有数据读走时,才会清除。scanf(数据类型)和缓冲区类型不一致时,便无法读走数据,可能导致死循环。
一般输入结构为:
if(scanf("%d",&n)!=1)
{
scanf(“%*[^\n]”);//清除输入缓冲区剩余字符
scanf("%*c"); //从缓冲区中读走一个字符忽略掉
}
说明:*忽略读到的内容[^\n]任何非\n的字符(^非),即将\n之前的所有字符读走
3.3.2输出缓冲区
输出到屏幕的条件:
1\n
2程序结束
3输出缓冲区满(4KB)
4人工刷新(fflush)
int main(){
printf(“hello world!”);
while(1);
}
注意:上面的程序是没有输出的,应添加fflush(stdout)或Ctrl+C终止程序