概述
C语言回炉之字符串和格式化输入输出
char[] 和 null
字符串 和 字符
define
const
明示常量
printf转换说明符
printf转换修饰符
printf转换标记
scanf的转换说明符
scanf的转换修饰符
printf 和scanf的*修饰符
printf() 的*修饰符
scanf()里边的*修饰符
char[] 和 null
C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,字符串的字符被存储在连续的相邻的存储单元中,每个单元存储一个字符,C语言使用 (空字符)来标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0,C语言的字符串一定以空字符结束,这意味这数组的容量必须比待存储的字符数多1。当我们定义字符串的时候,编译器会在末尾加上空字符。
字符串 和 字符
‘x’是一个x字符,“x”是由x字符和 字符组成的字符串。
define
可以使用#define宏定义"明示常量",常用的定义语法如下:
#define NAME value
编译时,#define宏定义会被编译时替换。
const
C90标准新增了const关键字,用于限定一个变量为只读,例如:
const int MONTHS = 12;
明示常量
C语言库的头文件limits.h和float.h分别提供整数类型和浮点数类型大小限制相关的详细信息。每个头文件都定义了一些列供实现使用的明示常量,例如limits.h可能又以下预定义:
#define INT_MAX +32767
#define INT_MIN -32768
如果程序有 #include,则可以直接使用这些明示常量:
printf("Maximum int value on you system = %d n",INT_MAX);
limits.h中的明示常量
明示常量
含义
CHAR_BIT
char类型的位数
CHAR_MAX
char类型的最大值
CHAR_MIN
char类型的最小值
SCHAR_MAX
signed char类型的最大值
SCHAR_MIN
signed char类型的最小值
UCHAR_MAX
unsigned char类型的最大值
SHRT_MAX
short类型的最大值
SHRT_MIN
short类型的最小值
USHRT_MAX
unsigned shrt类型的最大值
INT_MAX
int类型的最大值
INT_MIN
int类型的最小值
UINT_MAX
unsigned int类型的最大值
LONG_MAX
long类型的最大值
LONG_MIN
long类型的最小值
ULONG_MAX
unsigned long类型的最大值
LLONG_MAX
long long类型的最大值
LLONG_MIN
long long类型的最小值
ULLONG_MAX
unsigned long long类型的最大值
同样的float.h头文件也定义一些明示常量,如FLT_DIG和DBL_DIG和LDBL_DIG,FLT,DBL,LDBL开头分别对应float,double,long double。
float.h中的明示常量
明示常量
含义
FLT_MANT_DIG
float类型的尾数位数
FLT_DIG
float类型的最小有效位数(十进制)
FLT_MIN_10_EXP
带全部有效数字的float类型的最小负数(以10为底)
FLT_MAX_10_EXP
float类型的最大正指数(以10为底)
FLT_MIN
保留全部精度的float类型的最小正数
FLT_MAX
float类型的最大正数
FLT_EPSILON
1.00和比1.00大的最小float类型值之间的差值
printf转换说明符
转换说明符
意义
%a(%A)
浮点数、十六进制数字和p记数法(C99/C11)
%c
单个字符
%d
有符号十进制整数
%f
浮点数(包括float和doulbe) 十进制记数法
%e(%E)
浮点数指数输出[e-(E-)记数法]
%g(%G)
根据值的不用自动选择%f或%e,%e格式用于指数小于-4或者大于等于精度
%i
有符号十进制整数(与%d相同)
%u
无符号十进制整数
%o
八进制整数
%x(%X)
十六进制整数0f(0F) e.g. 0x1234
%p
指针
%s
字符串
%%
输出字符%
printf转换修饰符
修饰符
意义
标志
五种标志将在后面的表中说明,可以使用零个或者多个标志示例: “%-10d”
digit(s)
字段宽度的最小值。如果字段不能容纳要打印的数或者字符串,系统会使用更宽的字段示例: “%4d”,“%10s”
.digit(s)
精度.对于%e,%E和%f转换,是将要在小数点的右边打印的数字的位数。对于%g和%G转换,是有效数字的最大位数。对于%s转换,是将要打印的字符的最大数目。对于整数转换,是将要打印的数字的最小位数。如果必要,要使用前导0来达到位数。只使用"."表示其后跟随一个0,所以%.f和%.0f相同示例: “%5.2f”表示打印一个浮点数,它的字段宽度为5个字符,小数点后有两个数字
h
和整数转换说明符一起使用,表示一个short int或unsigned short int类型数值。示例: “%hu”, “%hx”, “%6.4hd”
hh
和证书转换说明符一起使用,表示一个signed char或unsigned char类型数值
j
和整数转换说明符一起使用,表示一个intmax_t或uintmax_t值 示例: “%jd”,"%8jx"
l
和整数转换说明符一起使用,表示一个long int或unsigned long int类型值
ll
和整数转换说明符一起使用,表示一个long long int或unsigned long long int类型值(C99) 示例: “%lld”,"%8llu"
L
和浮点数转换说明符一起使用,表示一个long double值 示例: “%Lf”, “%10.4Le”
t
和整数转换说明符一起使用,表示一个ptrdiff_t值(与两个指针之间的差相对应的类型)(C99) 示例: “%td”, “%1ti”
z
和整数转换说明符一起使用,表示一个size_t值(sizeof返回的类型)(C99)示例: “%zd”,"%12zx"
printf转换标记
标志
意义
-
项目左对齐,即,会把项目打印在字段的左侧开始处示例: “%-20s”
+
有符号的值若为正,则显示带加号的符号;若为负,则显示带减号的符号示例: “%+6.2f”
(空格)
有符号的值若为正,则显示时带前导空格(但是不显示符号);若为负,则带减号符号。+标志会覆盖空格标志示例: “% 6.2f”
#
使用转换说明的可选形式。若为%o格式,则以0开始;若为%x和%Xgeshi ,则以0x或0X开始。对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符。对于%g和%G格式,它防止尾随0被删除示例: “%#o”, “%#8.0f”, “%+#10.3E”
0
对于所有的数字格式,用前导零而不是空格填充字段宽度。如果出现-标志或者指定了精度(对于整数)则忽略该标志示例: “%010d”, “%08.3f”,"%02X"
scanf的转换说明符
转换说明符
意义
%c
把输入解释成一个字符
%d
把输入解释成一个有符号十进制整数
%e,%f,%g,%a
把输入解释成一个浮点数
%E,%F,%G,%A
把输入解释成一个浮点数
%i
把输入解释成一个有符号十进制整数
%o
把输入解释成一个有符号八进制整数
%p
把输入解释成一个指针
%s
把输入解释成一个字符串;输入的内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符
%u
把输入解释成一个无符号十进制整数
%x,%X
把输入解释成一个有符号十六进制整数
scanf的转换修饰符
修饰符
意 义
*
滞后赋值。示例:“%*d”
digit(s)
最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(不管哪一个先发生都一样)停止对输入项的读取。示例:“s”
hh
把整数读作signed char 或 unsigned char 。示例:“%hhd”“%hhu”
ll
把整数读作long long或者 unsigned long long (C99)。示例:“%lld”“%llu”
h,l或L
“%hd”和“hi”指示该值将会存储在一个short int中。“%ho”“%hx”和“%hu”指示该值将会存储在一个unsigned short int中。“%ld”和“%li”指示该值将会存储在一个long中。“%lo”“%lx”和“%lu”指示该值将会存储在一个unsigned long中。“%le”“%lf”和“%lg”指示该值以double类型存储。将L(而非l)与e、f和g一起使用指示该值以long double类型存储。如果没有这些修饰符,d、i、o和x指示int类型,而e、f和g指示float类型。
j
在整形转换说明后面,表达使用 intmax_t或uintmax_t类型(C99)示例:“jd” “jo”
z
在整形转换说明后面,表明使用sizeof的返回类型 示例:“%zd” “%zo”
t
在整形转换说明后面,表明使用两个指针之间的差值的类型(C99)示例: “%td” “%tx”
printf 和scanf的*修饰符
printf() 和scanf() 都可以使用*修饰符来修饰转换说明的含义。
printf() 的*修饰符
如果事先没有指定字段宽度,想用程序来指定,那么就可以用*修饰符来代替字段宽度,但是需要一个参数告诉函数,字段宽度应该为多少。 即%d,参数应该包含和d的对应的值
#include
int main()
{
unsigned width,precision;
int number=256;
double weight=242.5;
printf("enter a field width:n");
scanf("%d",&width);
printf("the number is:%*d:n",width,number);
printf("now enter a width and precision:n");
scanf("%d%d",&width,&precision);
printf("weight=%*.*fn",width,precision,weight);
printf("done!n");
return 0;
}
scanf()里边的*修饰符
如果把*放在%和转换字符之间,就会跳过相应的输出项。
#include
int main()
{
int n;
printf("please enter three integers:n");
scanf("%*d %*d %d",&n);
printf("the last integers was%dn",n);
return 0;
}
上面的案例就会跳过2各整数,将第三个整数复制给n.
最后
以上就是优雅耳机为你收集整理的c语言格式化字符串9.6f,C语言回炉之字符串和格式化输入输出的全部内容,希望文章能够帮你解决c语言格式化字符串9.6f,C语言回炉之字符串和格式化输入输出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复