邪恶八进制信息安全团队技术讨论组's Archiver

evilknight 2007-2-14 19:47

[原创]C99基础教材(三、格式化输入输出)

C99基础教材(三、格式化输入输出)

原创作者:EvilKnight
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

   最近比较忙,所以没有按计划写教程,这里给大家道歉.不过在今后的教材中我将尽量精简。
   在第二章,我们讲了C的一些数据类型,也讲了一些基本的输入输出,但是远远满足不了我们平时的需求,这里我将

带大家一些去了解C99的输入输出.(如果大家有兴趣学的话可以建一个群这些,可以互相讨论,学习)

3.1 输出

3.1.1 printf语句
   printf函数是一个标准库函数,它的函数原型在头文件<stdio.h>中。但作为一个特例,不要求在使用 printf 函数

之前必须包含stdio.h文件。printf函数调用的一般形式为: printf(“格式控制字符串”,输出表列)其中格式控制字

符串用于指定输出格式。 格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后

面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如“%d”表示按十进制整型输出,“%ld”表

示按十进制长整型输出,“%c”表示按字符型输出等。
例:
[code]
#include <stdio.h>

int main(void)
{
printf ( "int: %d\n",sizeof(int));
printf ( "long int: %d",sizeof(long int));
printf ( "long: %d",sizeof(long));
printf ( "short int: %d",sizeof(short int));
printf ( "short: %d",sizeof(short));
printf ( "unsigned int: %d",sizeof(unsigned int));
printf ( "unsigned: %d",sizeof(unsigned));
printf ( "unsigned long: %d",sizeof(unsigned long));
printf ( "unsigned short: %d",sizeof(unsigned short));
printf ( "long long: %d",sizeof(long long));
return 0;
}
[/code]

此例中都是按十进制整型输出.

3.1.2 格式字符串

表示输出类型的格式字符      格式字符意义
a                 浮点数,十六进制数字和p-记数法(C99新增)
A                 浮点数,十六进制数字和P-记数法(C99新增)
c                 输出单个字符
d                 以十进制形式输出带符号整数(正数不输出符号)
e                 以指数(e-)形式输出单、双精度实数
E                 以指数(E-)形式输出单、双精度实数
f                 以十进制小数形式输出单、双精度实数
g                 根据数值不同自动选择%f或%e,%e在指数小于-4或大于等于数度时使用
G                 根据数值不同自动选择%f或%E,%E在指数小于-4或大于等于数度时使用
i                 以十进制形式输出带符号整数(与 d相同)
o                 以八进制形式输出无符号整数(不输出前缀O)
p                 指针
s                 字符串
u                 以十进制形式输出无符号整数
x                 使用十六进制数字0f的无符号十六进制整数
X                 使用十六进制数字0F的无符号十六进制整数
%                 输出一个百分号

3.1.3 printf () 的转换说明修饰符
标志                   意义
digit(s)              s代表字符串宽度最小值,如果不能容纳要打印的数或字符串,系统会使用更宽的

                      .比如 printf ("%2d",i);
.digit(s)                 精度,比如%5.2f,它的宽度为5个字符,其中二位是小数部分.
h                      和整型转换说明符一起使用,表示short int或unsigned short int类型数值
hh                      和整数转换说明符一起使用,表示一个signed char或unsigned char类型数值.
j                      和整型转换说明符一起使用,表示一个intmax_t或uintmax_t值
l                      和整型转换说明符一起使用,表示一个long int或unsigned long int类型值
ll                      和整型转换说明符一起使用,表示一个long long int或 unsigned long int类型  

                      值
L                      和浮点转换说明符一起使用,表示一个long double值
t                      和整数转换说明符一起使用,表示一个ptrdiff_t值(与两个指针之间的差相对应  

                      的类型)
z                      和整型转换说明符一起使用,表示一个size_t值.

3.1.4 printf () 的标志
标志字符为-、+、#、空格四种,其意义下表所示:
标志格式字符     标 志 意 义
-           结果左对齐,右边填空格
+          输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号
#          对c,s,d,u类无影响;对o类, 在输出时加前
缀o         对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点

3.1.5 printf () 的返回值
   printf()的返回值是他所打印的字符的数,如果输出错误,将返回一个负数.



3.2 putchar() 函数
   putchar() 的功能就是输出一个字符, 一般形式putchar(字符变量);
   例如:
[code]
char c = &#39;a&#39;;
putchar(c);
putchar(&#39;b&#39;);
putchar(&#39;\n&#39;);
[/code]



3.3 scanf() 函数
3.3.1
   scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用

scanf函数之前不必包含stdio.h文件。scanf函数的一般形式为: scanf(“格式控制字符串”,地址表列); 其中,格式

控制字符串的作用与printf函数相同,地址表列中给出各变量的地址。 地址是由地址运算符“&”后跟变量名组成的。
例:
[code]
#include <stdio.h>
int main(void)
{
char c;
scanf ("%c",&c);
printf ("\n%c\n",c);
return 0;
}[/code]

3.3.2 scanf() 的转换说明修饰符
c     输入单个字符
d     输入有符号十进制整数
e,f,g,a  输入实型数
E,F,G,A  输入实型数
i      输入有符号十进制整数
o     输入有符号八进制整数
p      输入一个指针(地址)
s     输入字符串
u     输入无符号十进制整数
x,X    输入有符号十六进制整数

3.3.3 scanf() 的转换修饰符
*      滞后赋值,即跳过该输入值
digit(s)  最大字符宽度,在达到s或者第一个空白字符时,停止对输入项的读取
hh      把整数读作signed char或unsigned char
ll      把整数读作long long或unsigned long long
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与e、f和g一起使用指示该值以

long              double类型存储。如果没有这些修饰符,d、i、o和x指示int类型,而e、f和g指示float类

型.

3.3.4 scanf() 的返回值
   scanf() 返回成功读入的项目的个数.如果它没有读取任何项目(如果它期望一个数字,而您输入一个非数字)会返回

0.
3.3.4 scanf() 的输入
   下面我来讲一个scanf()的格式.
[code]
   scanf ("%d%d",&a,&b);
   scanf ("%c %c",&a,&b); //注意%c%c中间有一个空格.
   scanf ("a=%d,b=%d",&a,&b,);
[/code]
第一个scanf()语句,如果我们要把1和2分别赋给a,b的话可以用1 2,中间的这个空格可以是换行等,可以是多个空白符

,多个换行.
第二个,注意中间有一个非格式控制符,所以我们要将其一起输入,但是这里输入一个就够了,因为空格、换行这些都

是字符,将如我们输入a再加二个空格的话,那b的值就是空格符,所以这里我们要输入a b;
第三个,注意非格式控制符....a=1,b=2.



3.4 getchar()
3.4.1 getchar()函数的功能是从键盘上输入一个字符.
一般形式为getchar();常把输入的字符赋予一个字符变量,构成赋值语句
例如:
char c;
if (c = getchar())
...........

注:参考C primer plus 5th

有什么问题大家再指出吧,因为时间关系我没有很得很细..

页: [1]
© 1999-2008 EvilOctal Security Team