使用输入/输出库函数的每个源程序文件必须包含:
#include
int getchar(void); //从标准输入中(一般为键盘)一次读取一个字符
int putchar(int); //用于输出数据。putchar(c)将字符c送至标准输出上
printf();
许多程序只从一个输入流中读取数据,并且只向一个输出流中输出数据。对于这样的程序,只需要使用函数getchar、putchar和printf实现输入/输出即可。
int printf(char *format, arg1, arg2, ...)
函数printf在输出格式format的控制下,将其参数进行转换与格式化,并在标准输出设备上打印出来。它的返回值为打印的字符数。
普通字符和转换说明。
普通字符将原样不动地复制到输出流中,而转换说明都由一个百分字符(既%)开始,并以一个转换字符结束。在字符%和转换字符中间可能依次包含下列组成部分:
printf("%.*s", max, s); //为了从字符串s中打印最多max个字符。
在打印字符串"hello, world"(12 个字符)时根据不同的转换说明产生的不同结果:
:%s: :hello, world:
:%10s: :hello, world:
:%.10s: :hello, wor:
:%-10s: :hello, world:
:%.15s: :hello, world:
:%-15s: :hello, world :
:%15.10s: : hello, wor:
:%-15.10s: :hello, wor :
函数sprintf执行的转换和函数printf相同,但它将输出保存到一个字符串中:
int sprintf(char *string, char *format, arg1, arg2, ...); //string需要足够大
输入函数 scanf 对应于输出函数printf,它在与后者相反的方向上提供同样的转换功能。
int scanf(char *format, ...)
还有一个输入函数sscanf,它用于从一个字符串(而不是标准输入)中读取字符序列:
int sscanf(char *string, char *format, arg1, arg2, ...)
格式串通常都包含转换说明,用于控制输入的转换。格式串可能包含下列部分:
FILE *fp;
FILE *fopen(char *name, char *mode);
fp = fopen(name, mode);
fopen用文件外部名与操作系统进行某些必要的连接和通信(我们不必关心这些细节),并返回一个随后可以用于文件读写操作的指针。该指针称为文件指针,它指向一个包含文件信息的结构,这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经到达文件结尾等等。用户不必关心这些细节,因为
fopen 的第一个参数是一个字符串,它包含文件名。第二个参数是访问模式,也是一个字符串,用于指定文件的使用方式。允许的模式包括:读(“r”)、写(“w”)及追加(“a”)。某些系统还区分文本文件和二进制文件,对后者的访问需要在模式字符串中增加字符“b”。
如果打开一个不存在的文件用于写或追加,该文件将被创建(如果可能的话)。当以写方式打开一个已存在的文件时,该文件原来的内容将被覆盖。但是,如果以追加方式打开一个文件,则该文件原来的内容将保留不变。读一个不存在的文件会导致错误,其它一些操作也可能导致错误,比如试图读取一个无读取权限的文件。如果发生错误,fopen将返回NULL。
int getc(FILE *fp) //getc 函数返回fp 指向的输入流中的下一个字符
int putc(int c, FILE *fp) //该函数将字符c写入到fp指向的文件中,并返回写入的字符。
启动一个C 语言程序时,操作系统环境负责打开3 个文件,并将这3 个文件的指针提供给该程序。这3 个文件分别是标准输入、标准输出和标准错误,相应的文件指针分别为stdin、stdout 和stderr,它们在
int fscanf(FILE *fp, char *format, ...)
int fprintf(FILE *fp, char *format, ...)
int fclose(FILE *fp)
执行和fopen 相反的操作,它断开由fopen 函数建立的文件指针和外部名之间的连接,并释放文件指针以供其它文件使用。
将其出错信息写到标准错误文件上。
int ferror(FILE *fp) //如果流fp中出现错误,则函数ferror返回一个非0 值。
int feof(FILE *fp) //如果指定的文件到达文件结尾,它将返回一个非0 值。
char *fgets(char *line, int maxline, FILE *fp)
fgets 函数从fp 指向的文件中读取下一个输入行(包括换行符),并将它存放在字符数组line中,它最多可读取maxline-1个字符。读取的行将以’\0’结尾保存到数组中。
int fputs(char *line, FILE *fp)
输出函数 fputs将一个字符串(不需要包含换行符)写入到一个文件中。如果发生错误,该函数将返回EOF,否则返回一个非负值。
头文件
在下面的各个函数中,s与t为char *类型,c与n为int类型。
strcat(s, t) //将t指向的字符串连接到s指向的字符串的末尾
strncat(s, t, n) //将 t指向的字符串中前n个字符连接到s指向的字符串的末尾
strcmp(s, t) //根据s 指向的字符串小于(st)t指向的字符串的不同情况,分别返回负整数、0或正整数
strncmp(s, t, n) //同 strcmp相同,但只在前n个字符中比较
strcpy(s, t) //将t指向的字符串复制到s指向的位置
strncpy(s, t, n) //将 t指向的字符串中前n个字符复制到s指向的位置
strlen(s) //返回s指向的字符串的长度
strchr(s, c) //在s指向的字符串中查找c,若找到,则返回指向它第一次出现的位置的指针,否则返回NULL
strrchr(s, c) //在s指向的字符串中查找c,若找到,则返回指向它最后一次出现的位置的指针,否则返回NULL
头文件
c 是一个可表示为unsigned char类型或EOF的int 对象。该函数的返回值类型为int。
isalpha(c) //若c是字母,则返回一个非0 值,否则返回0
isupper(c) //若c是大写字母,则返回一个非0值,否则返回0
islower(c) //若c是小写字母,则返回一个非0值,否则返回0
isdigit(c) //若c是数字,则返回一个非0 值,否则返回0
isalnum(c) //若isalpha(c)或isdigit(c),则返回一个非0值,否则返回0
isspace(c) //若c是空格、横向制表符、换行符、回车符,换页符或纵向制表符,则返回一个非0 值
toupper(c) //返回c的大写形式
tolower(c) //返回c的小写形式
函数 malloc和calloc用于动态地分配存储块。
void *malloc(size_t n) //当分配成功时,它返回一个指针,设指针指向n 字节长度的未初始化的存储空间,否则返回NULL。
void *calloc(size_t n, size_t size) //当分配成功时,它返回一个指针,该指针指向的空闲空间足以容纳由n 个指定长度的对象组成的数组,否则返回NULL。
free(p)
free§函数释放p 指向的存储空间,其中,p 是此前通过调用malloc 或calloc 函数得到的指针。存储空间的释放顺序没有什么限制,但是,如果释放一个不是通过调用malloc或calloc函数得到的指针所指向的存储空间,将是一个很严重的错误。
头文件
每个函数带有一个或两个double类型的参数,并返回一个double类型的值。
sin(x) //x 的正弦函数,其中x 用弧度表示
cos(x) // x 的余弦函数,其中x 用弧度表示
atan2(y, x) // y/x 的反正切函数,其中,x 和y用弧度表示
exp(x) //指数函数ex
log(x) // x 的自然对数(以e为底),其中,x>0
log10(x) //x 的常用对数(以10为底),其中,x>0
pow(x, y) // 计算xy的值
sqrt(x) //x 的平方根(x≥0)
fabs(x) // x 的绝对值
函数 rand()生成介于0 和RAND_MAX之间的伪随机整数序列。其中RAND_MAX是在头文件
下面是一种生成大于等于0 但小于1 的随机浮点数的方法:
#define frand() ((double) rand() / (RAND_MAX+1.0))
如果所用的函数库中已经提供了一个生成浮点随机数的函数,那么它可能比上面这个函数具有更好的统计学特性。
函数 srand(unsigned)设置rand 函数的种子数。
int ungetc(int c, FILE *fp)
该函数将字符c写回到文件fp中。如果执行成功,则返回c,否则返回EOF。
system("date");