admin 管理员组文章数量: 887053
2024年1月6日发(作者:visual basic和python哪个好学)
(一)输入输出常用函数1,printf(1)有符号int%[-][+][0][width][.precision][l][h]d-:左对齐+:正数前加‘+’0:右对齐,acwidth
(4)intgetchar(void)直接读取字符,不回显conio.h注意:(1,2)对于回车键返回‘n’(3,4)对于回车键返回‘r’2;字符/串非格式化输出函数(1)intputchar(intc)正常返回字符代码值,出错返回EOF(2)intputc(intc,FILE*stream)正常返回字符代码值,出错返回EOF(3)intputs(char*stream)自动回车换行stream==stdout(1)=(2)1;字符串的赋值#include
1>2返回正数1=2返回01<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,unsignedintcount)将2的前N个字符连接到1后面以0结束;3;动态分配内存include
t:打开一个文本文件(缺省值)b:打开一个二进制文件一:文件的打开与关闭1:打开文件FILE*fopen(char*filename,char*mode)Filename:是字符串,表示打开的文件名,文件名前可以带路径。Mode:也是字符串,表示打开文件的方式。功能----按指定方式打开文件。返回值----如果文件打开成功,返回“文件结构体指针”,否者返回NULL(如:文件不存在或则写文件时不能创建)。Fopen(“A:”,”r+”);2:关闭文件Int*fclose(FILE*filename)正常关闭返回0;否者返回非0。3:Intfeof(FILE*filepointer)功能----在执行文件操作时,遇到文件尾,返回1;否则返回0;Eg.!feof(fp1)表示源文件(用于输入)未结束,循环继续。此函数适用于ASCII码文件盒二进制文件。EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCIC提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。二:文件的读写1:字符读写函数fgetc和fputc(1):intfgetc(FILE*filepointer)功能----从文件指针filepointer指向的文件中,读入一个‘字节(字符)’,同时将读写位置指针向前移动一个字节。
返回值-----如果读取正常,返回读到的的字节值;如果读到文件尾或出错;侧返回EOF。fgetc函数返回的值是int类型,如果强制的赋值给char类型,会导致当读出的数据为0xff时,误认为是EOF(-),导致程序出错。(2):Intfputc(intc,FILE*filepointer)功能-----将字符c输出到文件指针filepointer所指的文件中去;同时将读写位置指针向前移动一个字节。返回值------成功、返回字符数据c;否者返回EOF。2:字符串读写函数fgets和fputs(1):Char*fgets(char*s,intn,FILE*filrpointer)Cahr*s可以是“字符数组名”也可是“字符串”(别的类似的函数也是如此)功能---从文件指针filepointer指向的文件中,读取长度最大为n-1的字节串,并在字符串的末尾加上结束标志‘0’;然后将字符串放在s中,同时读写位置指针向前移动,实际读写的字串长度(<=n-1)个字节。“当从文件中读取第n-1个字符后或读取数据过程中遇到‘n’(“n也会存入字符串”)后,函数返回。”一次s中存放的字符串的长度不一定正好是‘n-1’。返回值----如成功,返回读取字串的指针;如果读到文尾或出错,返回NULL。(2):Intfputs(char*S,FILE*filepointer)功能---将存放在s中的字串,写到文件指针filepointer指向的文件中,同时将读写位置指针向前移动,字符串长度个字节。“注意:fputs函数不会将字符串结尾符‘0’写入文件,也不会自动向文件写入自动换行符,如需写入一行文本,s字串中必须包含‘n’。”返回值----成功,返回“最后写入文件的字符”;否则返回EOF。3:数据块读取函数fread和fwrite(1):Unsignedfread(void*ptr,unsignedsize,unsignedn,FILE*filepointer)功能--从filepointer所指向的的文件中读取n个数据项,每个数据项的大小事size个字节,并把这些数据存入ptr所指的内存中。且位置指针向前移动n*size个字节,如sizeof(int)。返回值-操作成功,返回读取数据项的个数(不是字节的个数);出错或到文尾,返回0。(2)
Unsignedfwrite(void*ptr,unsignedsize,unsignedn,FILE*filepointer)功能--将ptr所指向的的内存中存放的n个大小为size的数据项写入filepointer所指向的文件中,实际要写入数据项的字节数是n*size。同时,将读写位置指针向前移动n*size个字节。返回值--操作成功,返回:实际写入的数据项的个数;出错,返回0注意:--fread和fwrite一般用于二进制文件的输入和输出。如强制输入输出到文本文件,即使打开文件也是乱码或与内容不符。4:格式化读写函数fscanf和fprintf此两函数和scanf和printf函数的区别是:fcanf/fprintf的操作对象是“指定文件”;而scanf/printf函数的操作对象是“stdin和stdout”(1):Intfscanf(FILE*filepointer,constchar*format[,address,…]);功能--从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。///*fscanf遇到t会跳过,遇到n会结束.并让位置指针移到下行,所以此处的t可以略去*/返回值---如果操作成功,返回:读取数据项的个数;如果出错或到文尾,返回:EOF。Fscanf(fp,“%d,%f”,&I,&t)//若文件中有3,4.5,侧将3送入I,4.5送入t。fprintf(fp,“%d,%6.2f”,I,t)//将i和t按%d,%6.2f格式输出到fp文件。“%d,%f”中间的“,”可以不写生成的文件中数据相隔两个“空格”。(2):Intfprintf(FILE*filepointer,constchar*format[,address,…]);功能---函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件.fprintf()只能和printf()一样工作.返回值-成功,返回:写入到文件中数据的字节个数;否则返回EOF(-1)注意:文件格式化输出函数fprintf总是以字符串的形式将数据信息存到文件中,而不是以数值的形式存放到文件中,不管打开的是文本文件还是二进制文件。Fgets/fputc:可对“b/t”文件读写;Fread/fwrite:可对“b/t”文件读写Fgets/fputs:主要对“t”读写;对“b”读写无意义Fscanf/fprintf:同上
三:文件的定位读写(1):rewind函数Voidrewind(FILE*filepointer);功能--将filepointer所指向的文件的位置指针从新置回到文件的开头。返回值---无(2):fseek函数Intfseek(FILE*filepointer,longoffset,intwhence)功能--将filepointer所指向的文件的位置指针移动到特定的位置。这个特定的位置由whence和offset决定,即将位置指针移动到距离whence的offset字节处。(Whence的值如下表)如果offset为正值,表明新的位置在whence的后面;如果是负值,表明新的位置在whence的前面。返回值---操作成功返回0;否则返回非0/-1。(只对小于4G的文件有效)注意:fseek函数一般用于二进制文件,在文本文件中由于要进行转换,故往往计算的位置有误。Whence的常量值SEEK_SETSEEK_CURSEEK_END数值012含义文件的开始处文件位置指针的当前位置文件的末尾fseek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。fseek函数也可以这样理解,相当于在文件当中定位。这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意回车换行的情况:因为在一般浏览工具如UltraEdit中,回车换行视为两个字符0x0D和0x0A,但真实的文件读写和定位时确按照一个字符0x0A进行处理,因此碰到此类问题时,可以考虑将文件整个读入内存,然后在内存中手工插入0x0D的方法,这样可以达到较好的处理效果。当offset是向文件尾方向偏移的时候,无论偏移量是否超出文件尾,fseek都是返回0,当偏移量没有超出文件尾的时候,文件指针式指向正常的偏移地址的,当偏移量超出文件尾的时候,文件指针是指向文件尾的。并不会返回偏移出错-1值。offset>(当前位置指针到文尾的偏移时)使位置指针至尾的,不能写入内容,否则文件结尾符将被覆盖,文件变大/文件损坏将无法打开!当offset是向文件头方向偏移的时候,如果offset没有超出文件头,是正常偏移,文件指针指向正确的偏移地址,fseek返回值为0.当offset超出文件头时,fseek返回出错-1值,文件指针不变还是处于原来的地址。(3):ftell函数Longftell(FILE*filepointer)文件位置指针的最小值是0,最大值是文件的长度。功能--返回filepointer所指向文件当前位置指针的值(用相对文件开头的位移量表示)。返回值--成功,返回:当前位置指针的值;出错,返回:-1L。
(三)文件夹函数1、文件夹/文件的判断函数access头文件:io.h功能:确定文件或文件夹的访问权限。即,检查某个文件的存取方式,比如说是只读方式、只写方式等。如果指定的存取方式有效,则函数返回0,否则函数返回-1。用法:intaccess(constchar*filenpath,intmode);或者int_access(constchar*path,intmode);备注:(filenpath)当该参数为文件的时候,access函数能使用mode参数所有的值,当该参数为文件夹的时候,access函数值能判断文件夹是否存在。在WINNT中,所有的文件夹都有读和写权限Mode:0(F_OK)只判断是否存在2(R_OK)判断写入权限4(W_OK)判断读取权限6(X_OK)判断执行权限若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。特别提醒:fopen用这种方法做出的判断是不完全正确的,因为有的文件存在,但是可能不可读。错误代码EACCESS参数pathname所指定的文件不符合所要求测试的权限。EROFS欲测试写入权限的文件存在于只读文件系统内。EFAULT参数pathname指针超出可存取内存空间。EINVAL参数mode不正确。ENAMETOOLONG参数pathname太长。ENOTDIR参数pathname为一目录。ENOMEM核心内存不足ELOOP参数pathname有过多符号连接问题。EIOI/O存取错误。特别提醒:使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。2.C语言创建目录、文件夹1.调用WindowsAPI函数CreateDirectory():CreateDirectory("D:MyDir",NULL);2.调用C运行库函数mkdir():#include
(四)structstat作用stat,lstat,fstat1函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。函数原型#include
结构可以获得指定文件的信息。fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)voidreport(structstat*ptr){printf("Themajordevicenois:%dn",major(ptr->st_dev));//主设备号printf("Theminordevicenois:%dn",minor(ptr->st_dev));//从设备号printf("Thefile'snodenumberis:%dn",ptr->st_ino);//文件节点号printf("Thefile'saccessmodeis:%dn",ptr->st_mode);//文件的访问模式printf("Thefile'shardlinknumberis:%dn",ptr->st_nlink);//文件的硬链接数目printf("Thefile'suseridis:%dn",ptr->uid);//文件拥有者的IDprintf("Thefile'sgroupidis:%dn",ptr->gid);//文件的组IDprintf("Thefile'ssizeis:%dn",ptr->st_size);//文件的大小printf("Theblocksizeis:%dn",ptr->blksize);//文件占用的块数量printf("Thenumberofallocatedblocksis:%dn",ptr->st_blocks);//文件分配块数量structtm*accesstime,*lmodifytime,*lchangetime;//访问时间,修改时间,最后一个改变时间(属性)accesstime=localtime(&(ptr->st_atime));accesstime=localtime(&(ptr->st_mtime));accesstime=localtime(&(ptr->st_ctime));printf("Thelastaccesstimeis:%d::%d::%dn",accesstime->hour,accesstime->min,accesstime->sec);printf("Thelastmodifytimeis:%d::%d::%dn",lmodifytime->hour,lmodifytime->min,lmodifytime->sec);printf("Thelastchangetimeis:%d::%d::%dn",lchangetime->hour,lchangetime->min,lchangetime->sec);}结构time_t可用用localtime转换成tm结构,获得本地时间。(五)随机数发生器和srand
如果要取得[a,b)之间的数,则num=rand()%(b-a)+a;伪浮点随机数[a,b)fnum=rand()/(double)(RAND_MAX/(b-a))+a;//RAND_MAX==2^15-1注:a,b均为整数,a!=b,且a>=0;用rand()/double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:doubler=0.0;srand((unsigned)time(0));for(inti=0;i<10;i++){r=rand()/(double)(RAND_MAX);cout<
并转成structtm类型,该类型的各数据成员分别表示年月日时分秒。补充说明:time函数的原型也可以理解为longtime(long*tloc),即返回一个long型整数。因为在time.h这个头文件中time_t实际上就是:#ifndef_TIME_T_DEFINEDtypedeflongtime_t;/*timevalue*/#define_TIME_T_DEFINED/*avoidmultipledefinesoftime_t*/#endif即long。用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。#include
{structtm*ptr;time_tlt;lt=time(NULL);ptr=localtime(<);printf("second:%dn",ptr->tm_sec);printf("minute:%dn",ptr->tm_min);printf("hour:%dn",ptr->tm_hour);printf("mday:%dn",ptr->tm_mday);printf("month:%dn",ptr->tm_mon+1);printf("year:%dn",ptr->tm_year+1900);return0;}
版权声明:本文标题:C语言中常用函数大全 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1704477963h461527.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论