C语言输入输出函数详解
来源:互联网 发布:mac eclipse 编辑:程序博客网 时间:2024/04/30 04:51
1、fgetc && fputc 函数
fgetc()函数包含在C语言中的stdio.h头文件中,函数原型:intfgetc(FILE *fp);
函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编程时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。
返回值:返回所得到的字符;若读入错误,返回EOF。
fputc()函数 ,将一指定字符写入文件流中
表头文件
#include<stdio.h>
定义函数
int fputc(int c,FILE * stream);
函数说明
fputc会将参数c转为unsignedchar后写入参数stream指定的文件中。
返回值
fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。
下面用一个具体的例子来说明:
#include<stdio.h>#include<stdlib.h>intmain(int argc, char *argv[]){FILE*fp;charch;if((fp=fopen(“test.txt”,”r”))==NULL){printf(“Cannotopen file.\n”);exit(1);}while((ch=fgetc(fp))!= EOF){fputc(ch,stdout);}fclose(fp);return0;}
例程说明:
(1)首先程序先以读方式打开一个名为test.txt的文件(文件内容:This is atest)。
(2)开始获得文件内容。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch来接受读出的字符。
(3)最后的运行结果是在屏幕上打印出Thisis a test字符串,当然这里stdout可以换成文件,这样就输出写入到文件中。
2、fgets & fputs 函数
fgets()函数的基本用法为:fgets(char * s,int size,FILE * stream);
注:
1.第一个参数为将被赋值的数组名。注意,不用写数组名称后面的方括号以及其中的数组长度。
2.第二个参数是将要读取字符串的长度。注意,这里长度的数值是“字符串实际长度+1”,因为,字符串最后面还有’/0′。
3.最后一个参数为输入设备或者变量。一般情况下,我们都是从键盘输入,即stdin。(从文件读取的这里暂不说明)
fputs(str, fp) 用法:
(1)把str中零结束符之前的全部文字输入到文件中。
(2)输入完成后,不会增加额外的特殊字符,如换行符等。如果想输入完str后,就换行,则应该在上述调用后,再调用fputc(‘\n’,fp);才行。
例:下面的这段代码作用在于,输入一个字符串,然后计算出字符串中单词的个数。
#include<stdio.h>intmain(){charch[80];chart,m;inti=0,count=0,flag=0;fgets(ch,80,stdin);fputs(ch,stdout);for(i=0;ch[i]!=’\0′;i++){if (ch[i]==’ ‘) flag=0;elseif (flag==0){flag=1; count++; }}printf(“%d\n”,count);return0;}
这段代码的工作原理是,使用一个用于标识的变量flag,还有一个用于统计单词个数的变量count。然后逐一读取字符串中的每一个字符,当遇到字母时flag的值为1,当遇到空格时,flag的值为0。如果遇到一个字母,并且此时flag值为0(说明这个字母之前的一个字符是空格),给count加1,直到遇到空格时,将flag重新赋值为0。在fgets()使用中需要注意,其中第二个参数规定的字符串长度应该与字符串长度相等,否则运行程序时会有溢出的错误。当输入的字符串大于限定的字符串长度时(本例中限定的是80),限定长度之后的字符串会被丢弃。
补充: fgets(buf, size, fp)其行为方式如下:
(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符‘\n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。
(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符(’\0′)。因此如果想把buf中的换行符去掉,可以这样:buf[strlen(buf)-1] = ‘\0′;当前前提是buf足够大,可以容纳完整的一行(包括最后的那个换行符)。
3、fread && fwrite 函数
fread 从文件流读取数据
表头文件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数 nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。
返回值 返回实际读取到的nmemb数目。
范例
#include<stdio.h>#definenmemb 3structtest{charname[20];intsize;}s[nmemb];intmain(int argc,char *argv[]){FILE* stream;inti;stream= fopen(“/tmp/fwrite”,”r”);fread(s,sizeof(structtest),nmemb,stream);fclose(stream);for(i=0;i<nmemb;i++)printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s[i].name,i,s[i].size);}
执行
name[0]=Linux!size[0]=6
name[1]=FreeBSD!size[1]=8
name[2]=Windows2000size[2]=11
fwrite 将数据写至文件流
表头文件 #include<stdio.h>
定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE* stream);
函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。
返回值 返回实际写入的nmemb数目。
范例
#include<stdio.h>#defineset_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}#definenmemb 3structtest{charname[20];intsize;}s[nmemb];main(){FILE* stream;set_s(0,”Linux!”);set_s(1,”FreeBSD!”);set_s(2,”Windows2000.”);stream=fopen(“/tmp/fwrite”,”w”);fwrite(s,sizeof(structtest),nmemb,stream);fclose(stream);}执行
name[0]=Linux!size[0]=6
name[1]=FreeBSD!size[1]=8
name[2]=Windows2000 size[2]=11
- C语言输入输出函数详解
- c语言文件输入输出函数详解
- C语言详解 - 输入输出
- C语言输入输出函数
- C语言输入输出函数
- c语言输入输出函数
- c语言输入输出函数
- c语言输入输出函数
- C语言输入输出函数
- C语言输入输出函数
- C语言输入输出函数
- C语言输入输出函数
- C语言输入输出函数
- c语言输入输出函数
- C语言输入输出函数
- C语言输入输出函数总结
- C语言文件输入输出函数
- C语言中的输入输出函数
- [225]Implement Stack using Queues
- 【Python】Learn Python the hard way, ex7 字符串连接
- sql中的分析函数
- 数据结构之顺序表的操作
- Mantle JSONkeyPath辅助插件
- C语言输入输出函数详解
- 诚实人和说谎者 -- truth teller and liar
- 校友会攻略
- 数据结构之单链表
- swift控件代码
- 【IOS 开发学习总结-OC-34】★★文件 I/O——NSFileManager 管理文件和目录
- 原子性和可见性
- 数据结构之静态链表
- UI高级第五课 网络通信——iOS学习连载33