[C_2]格式化输入输出

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值