C语言格式化说明符

1.1.1 格式化输入输出函数
一、printf()函数
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出
信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原
样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,
用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出
参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想
不到的错误。

1. 格式化规定符
Turbo C2.0提供的格式化规定符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━
符号 作用
——————————————————————————
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
━━━━━━━━━━━━━━━━━━━━━━━━━━
说明:
(1). 可以在"%"和字母之间插进数字表示最大场宽。
例如: %3d 表示输出3位整型数, 不够3位右对齐。
%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,
小数点占一位, 不够9位右对齐。
%8s 表示输出8个字符的字符串, 不够8个字符右对齐。
如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。
但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出;
若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。
另外, 若想在输出值前加一些0, 就应在场宽项前加个0。
例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度
为4位。
如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,
小数点前的数字代表最小宽度。
例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则
第9个字符以后的内容将被删除。
(2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。
例如: %ld 表示输出long整数
%lf 表示输出double浮点数
(3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可
说明输出为左对齐, 否则为右对齐。
例如: %-7d 表示输出7位整数左对齐
%-10s 表示输出10个字符左对齐
2. 一些特殊规定字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 作用
——————————————————————————
\n 换行
\f 清屏并换页
\r 回车
\t Tab符
\xhh 表示一个ASCII码用16进表示,
其中hh是1到2个16进制数
━━━━━━━━━━━━━━━━━━━━━━━━━━

例1:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char c, s[20], *p;
 6     int a=1234, *i;
 7     float f=3.141592653589;
 8     double x=0.12345678987654321;
 9     p="How do you do";
10     strcpy(s, "Hello, Comrade");
11     *i=12;
12     c=‘\x41‘;
13     printf("a=%d\n", a); /*结果输出十进制整数a=1234*/
14     printf("a=%6d\n", a); /*结果输出6位十进制数a= 1234*/
15     printf("a=%06d\n", a); /*结果输出6位十进制数a=001234*/
16     printf("a=%2d\n", a); /*a超过2位, 按实际值输出a=1234*/
17     printf("*i=%4d\n", *i); /*输出4位十进制整数*i= 12*/
18     printf("*i=%-4d\n", *i); /*输出左对齐4位十进制整数*i=12*/
19     printf("i=%p\n", i); /*输出地址i=06E4*/
20     printf("f=%f\n", f); /*输出浮点数f=3.141593*/
21     printf("f=6.4f\n", f); /*输出6位其中小数点后4位的浮点数
22                             f=3.1416*/
23     printf("x=%lf\n", x); /*输出长浮点数x=0.123457*/
24     printf("x=%18.16lf\n", x);/*输出18位其中小数点后16位的长浮点
25                                数x=0.1234567898765432*/
26     printf("c=%c\n", c); /*输出字符c=A*/
27     printf("c=%x\n", c); /*输出字符的ASCII码值c=41*/
28     printf("s[]=%s\n", s); /*输出数组字符串s[]=Hello, Comrade*/
29     printf("s[]=%6.9s\n", s);/*输出最多9个字符的字符串s[]=Hello,
30                               Co*/
31     printf("s=%p\n", s); /*输出数组字符串首字符地址s=FFBE*/
32     printf("*p=%s\n", p); /* 输出指针字符串p=How do you do*/
33     printf("p=%p\n", p); /*输出指针的值p=0194*/
34     getch();
35     retunr 0;
36 }

上面结果中的地址值在不同计算机上可能不同。
例1.中第一条语句#include<stdio.h>的含义是调用另一个文件stdio.h, 这
是一个头文件, 其中包括全部标准输入输出库函数的数据类型定义和函数说明。
二、scanf()函数
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数
完全不同, 要特别注意。各个变量的地址之间同","分开。

例2:

1 main()
2 {
3     int i, j;
4     printf("i, j=?\n");
5     scanf("%d, %d", &i, &j);
6 }

上例中的scanf()函数先读一个整型数, 然后把接着输入的逗号剔除掉, 最
后读入另一个整型数。如果","这一特定字符没有找到, scanf()函数就终止。若
参数之间的分隔符为空格, 则参数之间必须输入一个或多个空格。
说明:
(1). 对于字符串数组或字符串指针变量, 由于数组名和指针变量名本身就
是地址, 因此使用scanf()函数时, 不需要在它们前面加上"&"操作符。

例3:

1 mian()
2 {
3     char *p, str[20];
4     scanf("%s", p); /*从健盘输入字符串*/
5     scanf("%s", str);
6     printf("%s\n", p); /*向屏幕输出字符串*/
7     printf("%s\n", str);
8 }

(2). 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数, 表示
任何读操作中的最大位数。
如例3中若规定只能输入10字符给字符串指针p, 则第一条scanf() 函数语句
变为
scanf("%10s", p);
程序运行时一旦输入字符个数大于10, p就不再继续读入, 而后面的一个读
入函数即scanf("%s", str)就会从第11个字符开始读入。
实际使用scanf()函数时存在一个问题, 下面举例进行说明:
当使用多个scanf()函数连续给多个字符变量输入时,

例如:

1 main()
2 {
3     char c1, c2;
4     scanf("%c", &c1);
5     scanf("%c", &c2);
6     printf("c1 is %c, c2 is %c", c2\1, c2);
7 }

运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf
("%c", &c1)时, 给变量c1赋值"A", 但回车符仍然留在缓冲区内, 执行输入语句
scanf("%c", &c2)时, 变量c2输出的是一空行, 如果输入AB后回车, 那么输出结
果为: c1 is A, c2 is B。
要解决以上问题, 可以在输入函数前加入清除函数fflush()( 这个函数的使
用方法将在本节最后讲述)。

修改以上程序变成:

1 main()
2 {
3     char c1, c2;
4     scanf("%c", &c1);
5     fflush(stdin);
6     scanf("%c", &c2);
7     printf("c1 is %c, c2 is %c", c1, c2);
8 }

1.1.2 非格式化输入输出函数
非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但
这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较
方便。下面分别进行介绍。
一、puts()和gets()函数
1. puts()函数
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
puts(s);
其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf("%s\n", s)相同。

例4:

1 main()
2 {
3     char s[20], *f; /*定义字符串数组和指针变量*/
4     strcpy(s, "Hello!"); /*字符串数组变量赋值*/
5     f="Thank you"; /*字符串指针变量赋值*/
6     puts(s);
7     puts(f);
8 }

说明:
(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。
(2). 可以将字符串直接写入puts()函数中。如:
puts("Hello, Turbo C2.0");
2. gets()函数
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。其调用格式为:
gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)
函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符
串直到回车为止。

例5:

 1 main()
 2 {
 3     char s[20], *f;
 4     printf("What‘s your name?\n");
 5     gets(s); /*等待输入字符串直到回车结束*/
 6     puts(s); /*将输入的字符串输出*/
 7     puts("How old are you?");
 8     gets(f);
 9     puts(f);
10 }

版权声明: 本文由 【kingdev】  整理并转载(只做学习使用!)

原文地址:链接

时间: 2024-10-25 21:46:48

C语言格式化说明符的相关文章

格式化说明符定义、转义字符、枚举、结构体、typedef

1.格式化说明符定义: %i,%d:输出十进制整型数 %6d:输出十进制整型数,至少6个字符宽 %li,%ld:输出长整数 %u:输出无符号整数 %lu:输出无符号长整数(相当于:unsigned long int) %f,%g:输出浮点类型数 %.2f:输出浮点类型数,小数点后有两位小数 %lf:输出双精度浮点数 %o:输出八进制数 %e:以科学计数法,输出浮点数 %c:输出字符 %s:输出字符串 %p,%x:输出变量的内存地址和十六进制数 2.转义字符: \a             响铃符

C语言格式化之scanf

1.       格式输入函数的一般形式 函数功能:用于接收从键盘上输入的数据,输入的数据可以是整型.实型和字符型等. 一般形式:scanf(“格式控制字符串”,变量地址列表): 格式控制字符串:用于控制输入数据格式,必须以引号引导,内容由一个或多个格式控制字符组合而成,也可以含有非格式控制字符,非格式控制字符称为普通字符.普通字符按原样在对应位置输入. 变量地址列表:用于指定存放数据的变量地址.如果需要给多个变量输入数据,则各变量地址要用逗号隔开.变量地址表示方式是:&变量名.例如,&a

【ThinkingInJava】26、java字符串格式化说明符

/** * 书本:<Thinking In Java> * 功能:对于java字符串格式化说明符 * format字符串的格式化参数语法如下: * %[argument_index$][flags][width][.precision]conversion * 文件:Receipt.java * 时间:2015年4月11日19:40:53 * 作者:cutter_point */ package Lesson13_strings; import java.util.Formatter; pub

C语言格式化输入输出函数

一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种形式: 1.格式说明符:规定了相应输出表列内容的输出格式,以%打头,如%d.%o等 2.转义字符:用来输出转义字符所代表的控制代码或者特殊字符,比如常用的‘\n'.‘\t’ 3.普通字符:需要原样输出的字符. 3.输出表列为若干需要输出的数据项,它与格式说明符在数量和类型上一一对应: 4.格式字符m指定输出数据所占宽度,n对实数表示输出n

格式化说明符以及修饰符(整理)

[摘要]最近用到一些格式化输出符,调试老提示类型不对,故整理一下,方便查看. 1. 转换说明符 转换说明符       意        义 %c 把输入解释成一个字符 %d 把输入解释成一个有符号十进制整数 %e,%f,%g,%a 把输入解释成一个浮点数(%a 是C99标准) %E,%F,%G,%A 把输入解释成一个浮点数(%A是C99标准) %i 把输入解释成一个有符号十进制整数 %o 把输入解释成一个有符号八进制整数 %p 把输入解释成一个指针(一个地址) %s 把输入解释成一个字符串:输

C语言格式化输出函数及使用禁区

编译环境: Debian: 7.6 gcc: 4.7.2 一.格式化输出函数 C语言中设计到的标准格式化输出函数如下: #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t s

C语言格式化输出小结

函数说明 在gcc编程中,我们常用到的字符格式化输出函数是printf的,实际上gcc继承了C语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库函数文件stdio.h/ stdarg.h中,具体函数如下: #include <stdio.h> printf, int printf(const char *format, ...); fprintf, int fprintf(FILE *stream, const char *format, ...); sprintf

WPF 语言格式化文本控件

前言 本章讲述正确添加语言资源的方式,以及一段语言资源的多种样式显示. 例如:“@Winter,你好!感谢已使用软件 800 天!” 在添加如上多语言资源项时,“XX,你好!感谢已使用软件 X 天!” 那么,你是怎么添加语言资源的呢? 分别添加,“,你好!”.“感谢已使用软件”.“年”3个,再通过界面绑定动态变量 昵称和使用天数? 假如你是按照如上添加语言资源的,那么问题来了,添加如上英文语言资源呢?是不是也分别添加单个资源,再拼凑绑定? 添加语言资源 正确的做法是,添加整个语言资源,“{0},

c语言 格式化文件输入输出

已经对普通的格式化输入输出函数scanf和printf很熟悉了,格式化文件输入输出函数是在两个函数名前加f,表明"读写对象是磁盘文件而不是键盘和显示器". 两个函数的原型为: int fprintf(FILE , const char , -); int fscanf(FILE , const char , -); fprintf和fscanf与普通的printf和scanf用法几乎一致,唯一的不同在于多了第一个参数-文件指针,用以标识输入的源文件或输出的目的文件. 当输入输出正确时,