主要是scanf和printf的转换说明和修饰符

strlen()和sizeof()

strlen()和sizeof()都是c中重要的函数,前者能计算字符串数据类型或者特定量的字符长度,而sizeof()能计算数据类型或特定量的大小,即所用储存单元数量。听起来很相似,但是一个特定量所占储存单元大小有时候都是和其字符长度不同的。例如,定义一个char类型字符串a[5]=wow,其sizeof(a)得出结果为5,而strlen(a)结果为3(strlen忽略char字符串末尾的null字符)。这是因为sizeof()将a未用到的储存空间也计算在内了。需要注意的是在使用strlen()函数前需要包含string.h头文件。对于输出时的转义字符,这两个函数的返回值都为unsigned long 或者unsigned,所以需使用%lu或者%u,但是在新的标准中(如c99),为这两个函数专门定义了一个特殊转换说明%zd,所以不论使用哪一种都是可行的。

 

明示常量

一般常量在函数主体中声明就可以了,且其值是在程序运行中被赋予的。明示常量则不然,其定义方式是在c预处理器中将定义的常量与其值进行一个替换,例如#define x 110,#调用预处理器在编译程序时将所有x的值替换为110,在最终执行代码时,所有替换就已完成。

在头文件limits.h和float.h中,定义了一系列明示常量,如下:

CHAR_BIT 其值代表char数据类型所占位数

CHAR_MAX 其值代表char数据类型所能表示最大值

CHAR_MIN 其值代表char数据所能表示最小值

FLT_MANT_DIG float类型的尾数位数

FLT_DIG float类型的最少有效数字位数(10进制)

FLT_MIN_10_EXP 带全部有效数字的float类型的最小负指数(以10为底)

FLT_MAX_10_EXP float类型的最大正指数(以10为底)

FLT_MIN保留全部精度的float类型最小正数

FLT_MAXfloat类型最大正数

FLT_EPSILON 1.00和比1.00大的最小float类型值之间的差值

相似的还有,

SCHAR_MAX

SCHAR_MIN

UCHAR_MAX

SHRT_MAX

SHRT_MIN

INT_MAX

INT_MIN

UINT_MAX

LONG_MAX

LONG_MIN

ULONG_MAX

LLONG_MAX

LLONG_MIN

ULLONG_MAX

 

printf()

输出函数,主要转换说明中有几个说明记得不是很清楚

%i 十进制整数,等价于%d

%G或%g根据情况自动选择%f或%E(%e),用于指数小于-4或者>=精度时

然后转换修饰符中,也有几个记得不是很牢,

空格,如% d,如果输出数据为正,则数据前无任何符号(用空格代替),如数据为负,则带有负号前缀

 

0,如%010d,如果为数值,输出0代替空格填充字面宽度,对于整数,如有指定宽度(*)或-,忽略此修饰符

例如举个例吧,

#include<stdio.h>

int main (void)

{

int a=12100;

printf(“%010d",a);

return 0;

}

输出的是0000012100而非     12100(前面空了5位)

 

#,除了能转换输出格式为0或0x前缀外,对于浮点数据,保留最后小数点(即使无小数位),对于%g(%G),保留之后的0

 

.数字,对于%g,表示有效数字最大位数;对于%s,表示待打印字符最大数量;对于整形,表示待打印数字的最小位数(不足用0补充)

 

hh,和整形转换说明一起使用,表示signed char或unsigned char                                                                                                                                           

 

j,和整形转换说明使用,表示intmax_t和uintmax_t 类型的值,这些类型定义在stdint.h中

 

L,和浮点转换说明一起使用,表示long double

 

t,和整形转换说明一起使用,表示ptrdiff_t的类型的值(两个指针差值)

 

*,自定义字面宽度或精度,和整形转换说明和浮点转换说明一起使用,如,%*d,%5.*f

 

scanf()

转换符不说了,返回值在成功读取情况下返回成功读取项数,(空白格如回车制表等自动跳过,遇非数字字符非数字字符认为为结尾,放回输入直到下次读取数据。如读取类型与类型不符返回0。读到结尾返回EOF。(而printf函数返回值为字符个数,包括空格。

 

修饰符也差不多,主要是*,在此表示跳过,例如,

 

#include<stdio.h>

int main (void)

{

int a;

scanf("%d%*d",&a);

return 0;

}

假如输入值为 1和2,程序只会读如2,因为*表示跳过此项不读入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值