[C_2]格式化输入输出

来源:互联网 发布:linux安装finger 编辑:程序博客网 时间:2024/06/14 00:40

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终止程序












0 0
原创粉丝点击