C--格式化输入输出

格式化输入输出

参考:
《C语言程序设计:现代方法(第2版•修订版)》
中国大学MOOC西安邮电大学《C语言程序设计》课程

scanf("格式串", 地址);    // 格式化输入,f为format(格式)首字母
printf("格式串",);    // 格式化输出

scanf后面传入的是地址,需要使用取地址符&,而printf传入的是值不需要加地址。

格式串完整格式:%m.nX

X转换指定符类型备注
d十进制整数
o八进制整数
x十六进制整数
c字符
f定点十进制形式浮点数默认保留六位小数,末尾四舍五入,如果没有数字填充0
e指数形式浮点数科学计数法,比如23.4: 2.340000e+001
g指数形式或者定点十进制形式的浮点数形式选择根据属的大小决定,但与f不同的是g不显示尾随的0
s字符串C中无字符串定义类型,使用字符数组存储字符串

m:最小栏宽,要显示的最少字符数量。

若要显示的数值所需的字符数少于m:右对齐,左侧用空格填充。

若要显示的数值所需的字符数多于m:栏宽自动扩展为所需的尺寸,并不会丢失数字。

注意:小数点也要占一位字符

n:精度。依赖于转换指定符X的选择。

十进制整数(X:d):n指明待显示数字最少个数,若要显示的数值所需字符数少于n,用0补齐。

指数形式的浮点数(X:e):n指明小数点后应该出现的数字个数(默认为6)。若n为0,不显示小数点。

定点十进制浮点数(X: f):n与指数形式浮点数意义相同。

指数形式或者定点十进制形式的浮点数(X: g):n指明可以显示的所有有效数字的最大数量,不是小数点后的数字的最大数量

%后面跟-可以实现数值左对齐。

scanf函数默认自己在用户输入的字符中依次寻找对应的字符,即使我们在格式串中连续写转换指定,在实际输入时插入空格换行等等,并不影响scanf顺序读入,scanf函数在寻找数字的起始位置时会忽略空白字符,其他普通字符则会依次与输入的字符比较,如果比较成功,写入,继续向后;如果比较不成功,导致异常或者报错。

但是如果希望输入的时候用逗号隔开,那么就可以直接在格式串位置用逗号隔开,这样就可以在输入时用逗号隔开输入了,所以为了方便,scanf中的格式串是什么样式格式,输入时就可以用什么样式格式。

#include<stdio.h>

int main(void)
{
    int a, b;
    /*
    在输入时,用","隔开,scanf先匹配输入的a,符合整型写入%d,
    接着匹配",",与用户输入的","一致,继续匹配b的值,写入。
    如果没有输入",",那么匹配失败,运行结果与理想不一致,但程序并不会报错
    */
    scanf("%d, %d", &a, &b);    
    
    printf("%d %d", a, b);
    
    return 0;
}
#include<stdio.h>
/*
输入 10.3 5 6
结果为 10 0.300000 5
*/
int main(void)
{
	int i, j;
	float x;
	
	scanf("%d%f%d", &i, &x, &j);
	
	printf("%d %f %d", i, x, j);
	
	return 0;
}

上面这个代码大家可以深度体会一下scanf函数的底层逻辑。

  1. 找整数,scanf会根据整数的规定寻找结束点,整数是不会有小数点的,所以顺序匹配到"."就结束了%d的匹配。
  2. 找浮点数,继续上一步的匹配,从小数点开始,匹配到小数点就认为已经是小数的开始,所以就是0.3,而3后面的空格不可能是小数的部分,所以就停止匹配,而float的默认为小数点后六位,所以将0.30000匹配给%f。
  3. 3后面的空格开始匹配,但是scanf在定位数字的开始时会忽略空白,所以定位到空格后面的5,符合整数,同理,5后面的空格就不可能是整数的一部分,所以停止匹配,将5匹配给%d。
  4. 格式串结束,运行完毕,后面的空格和6自然不会被匹配。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值