(一)输入输出常用函数
1,printf
(1)有符号int
%[-][+][0][width][.precision][l][h]d
-:左对齐
+:正数前加‘+’
0:右对齐,acwidth<width,左补零
.precision:至少输出位数。若实际的位数>.precision,按实际输出,否者左边补零
(2)无符号int
%[-][#][0][width][.precision][l][h]u|o|x|X
#:”%o%x/X”输出0,0x,0X
.
precision:同上,TC/BC包含0x/X,VC下不包含
(3)实数输出
%[-][+][#][0][width][.precision][l][L]f|e|E|g|G
#:必须输出小数点
.precision:小数位数(四舍五入)
(4)字符和字符串的输出
%[-][0][width]c%[-][0][width][.precision]s
.precision:S的前precision位
2,scanf
%[*][width][l][h]Type
With:指定输入数据的宽度,遇空格、Tab、\n结束
*:抑制符scanf(“%2d%*2d%3d”,&num1,&num2)输入123456789\n;num1==12,num2==567.
注意:
(1)指定width时,读取相应width位,但按需赋值
Scanf(“%3c%3c”,&ch1,&ch2)输入a bc d efg ch1==a ch2==d
(2)%c输入单字符时“空格、转义字符”均是有效字符
(二)ascll字符/字符串/文件函数
1;字符非格式化输入函数
(1)int getchar(void)接受字符,以回车结束,回显
(2)int getc(FILE*stream)从stream中接受字符,以回车结束,回显stream=stdin时,(1)==(2)(3)int getche(void)直接读取字符,回显conio.h
(4)int getchar(void)直接读取字符,不回显conio.h
注意:
(1,2)对于回车键返回‘\n’(3,4)对于回车键返回‘\r’
2;字符/串非格式化输出函数
(1)int putchar(int c)正常返回字符代码值,出错返回EOF
(2)int putc(int c,FILE*stream)正常返回字符代码值,出错返回EOF stream==stdout(1)=(2)
(3)int puts(char*stream)自动回车换行
1;字符串的赋值
#include<string.h memory.h>
Void*memset(void*s,char ch,unsigned n)
将以S为首地址的,一片连续的N个字节内存单元赋值为CH.
Void*memcpy(void*d,void*s,unsigned n)
将以S为首地址的一片连续的N个字节内存单元的值拷贝到以D为首地址的一片连续的内存单元中。(对于数据类型、大小相同的数组可以用此函数拷贝/部分拷贝)
2;#include<string.h>
(1)strlen(求字符串长度)
求字符串长度,从给定的字符串的起始地址开始,到第一个’\0’为止(不包含’\0’)。
转义字符\ddd、\xhh;看做一个字符。
(2)字符串的复制
Strcpy(字符数组1,字符串2);
将字符串2,复制到字符数组1中(包含\0);1要足够大。
1:必须为字符数组变量2字符数组变量或字符串常量
strncpy(字符数组1,字符串2,长度n)
将2中的前N个字符复制到1中,并在末尾加\0;
n>=strlen(2)时,其等价strcpy。
(4)字符串的比较
1>2返回正数
1=2返回0
1<2返回负数
比较规则:逐个比较字符的ASCII码值,直到遇到不同的字符或‘\0’。
Strcmp(字符串1,字符串2)
Stricmp/Strcmpi(字符串1,字符串2)“不区分大小写”
Strncmp(字符串1,字符串2,长度n)
将字符串1前N个字符与字符串2前N个字符进行比较(n足够大时等价strcmp)
Strincmp(字符串1,字符串2,长度n)
(5)字符串的连接
Strcat(字符串1,字符串2)
将2连接到1后面(包含\0);1要足够大。
Strncat(字符串1,字符串2,unsigned int count)
将2的前N个字符连接到1后面以\0结束;
3;动态分配内存include<stdlib.h/malloc.h>
(1)void*calloc(unsigned n,unsigned size);
功能:在内存的动态存储区中分配n个长度为size的连续空间,并且赋初值为0(malloc侧不是);函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
(2)原型:
extern void*realloc(void*mem_address,unsigned int newsize)
语法:
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失!
头文件:#include<stdlib.h>有些编译器需要#include<alloc.h>,在TC2.0中可以使用alloc.h头文件
功能:先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。
(三)文件函数
mode:
r:打开已存在文件,准备从文件中读取数据,不能写入
r+:可读可写
w:创建一个新文件,准备写入;如文件已存在,此文件将被空文件覆盖
w+:增加“读取”操作
a:打开已存在文件,准备在文件尾部追加数据,不能读取。
如文件不存在,侧创建此文件,准备写入。
a+:增加“读取”
t:打开一个文本文件(缺省值)
b:打开一个二进制文件
一:文件的打开与关闭
1:打开文件
FILE*fopen(char*filename,char*mode)
Filename:是字符串,表示打开的文件名,文件名前可以带路径。
Mode:也是字符串,表示打开文件的方式。
功能----按指定方式打开文件。
返回值----如果文件打开成功,返回“文件结构体指针”,否者返回NULL(如:文件不存在或则写文件时不能创建)。
Fopen(“A:\\user\\”,”r+”);
2:关闭文件
Int*fclose(FILE*filename)
正常关闭返回0;否者返回非0。
3:
Int feof(FILE*filepointer)
功能----在执行文件操作时,遇到文件尾,返回1;否则返回0;
Eg.!feof(fp1)表示源文件(用于输入)未结束,循环继续。
此函数适用于ASCII码文件盒二进制文件。
EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF 的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。
当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。
那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。
二:文件的读写
1:字符读写函数fgetc和fputc
(1):
fprintf作用int fgetc(FILE*filepointer)
功能----从文件指针filepointer指向的文件中,读入一个‘字节(字符)’,同时将读写位置指针向前移动一个字节。
返回值-----如果读取正常,返回读到的的字节值;如果读到文件尾或出错;侧返回EOF。
fgetc函数返回的值是int类型,如果强制的赋值给char类型,会导致当读出的数据为0xff 时,误认为是EOF(-),导致程序出错。
(2):
Int fputc(int c,FILE*filepointer)
功能-----将字符c输出到文件指针filepointer所指的文件中去;同时将读写位置指针向前移动一个字节。
返回值------成功、返回字符数据c;否者返回EOF。
2:字符串读写函数fgets和fputs
(1):
Char*fgets(char*s,int n,FILE*filrpointer)
Cahr*s可以是“字符数组名”也可是“字符串”(别的类似的函数也是如此)
功能---从文件指针filepointer指向的文件中,读取长度最大为n-1的字节串,并在字符串的末尾加上结束标志‘\0’;然后将字符串放在s中,同时读写位置指针向前移动,实际读写的字串长度(<=n-1)个字节。“当从文件中读取第n-1个字符后或读取数据过程中遇到‘\n’(“\n也会存入字符串”)后,函数返回。”一次s中存放的字符串的长度不一定正好是‘n-1’。
返回值----如成功,返回读取字串的指针;如果读到文尾或出错,返回NULL。
(2):
Int fputs(char*S,FILE*filepointer)
功能---将存放在s中的字串,写到文件指针filepointer指向的文件中,同时将读写位置指针向前移动,
字符串长度个字节。“注意:fputs函数不会将字符串结尾符‘\0’写入文件,也不会自动向文件写入自动换行符,如需写入一行文本,s字串中必须包含‘\n’。”
返回值----成功,返回“最后写入文件的字符”;否则返回EOF。
3:数据块读取函数fread和fwrite
(1):
Unsigned fread(void*ptr,unsigned size,unsigned n,FILE*filepointer)
功能--→从filepointer所指向的的文件中读取n个数据项,每个数据项的大小事size个字节,并把这些数据存入ptr所指的内存中。且位置指针向前移动n*size个字节,如sizeof(int)。
返回值-→操作成功,返回读取数据项的个数(不是字节的个数);出错或到文尾,返回0。(2)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论