字符、字符串(行)、块(文件)读写文件流

1、    字符读写文件流

l          fgetc(由文件中读取一个字符——字符读写文件流)

相关函数  openfreadfscanfgetc

表头文件  include <stdio.h>

定义函数  int fgetc(FILE *stream);

函数说明  fgetc()参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF

返回值  getc()返回读取到的字符,若返回EOF则表示到了文件尾。

范例 

#include <stdio.h>

main()

{

FILE *fp;

int c;

fp = fopen(“exist”,”r”);

while((c=fgetc(fp))!=EOF)

printf(“%c”,c);

fclose(fp);

}

l          getc(由文件中读取一个字符) 

相关函数  readfopenfreadfgetc

表头文件  #include<stdio.h>

定义函数  int getc(FILE * stream);

函数说明  getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF-1)。虽然getc()fgetc()作用相同getc()为宏定义,非真正的函数调用。

返回值  getc()会返回读取到的字符,若返回EOF则表示到了文件尾。

范例  参考fgetc()

l          getchar(由标准输入设备内读进一字符) 

相关函数  fopenfreadfscanfgetc

表头文件  #include <stdio.h>

定义函数  int getchar(void);

函数说明  getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。

返回值  getchar()会返回读取到的字符,若返回EOF则表示有错误发生。

附加说明  getchar()非真正函数,而是getc(stdin)宏定义

范例 

#include <stdio.h>

main()

{

FILE * fp;

int c,i;

for(i=0li<5;i++)

{

c=getchar();

putchar(c);

}

}

执行  1234 /*输入*/

1234 /*输出*/

l          fputc(将一指定字符写入文件流中)

相关函数  fopenfwritefscanfputc

表头文件  #include <stdio.h>

定义函数  int fputc(int c, FILE * stream);

函数说明  fputc 会将参数转为unsigned char 后写入参数stream 指定的文件中。

返回值  fputc()返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例  #include <stdio.h>

main()

{

FILE * fp;

char a[26] = ”abcdefghijklmnopqrstuvwxyz”;

int i;

fp= fopen(“noexist”,”w”);

for(i=0;i<26;i++)

fputc(a[i],fp);

fclose(fp);

}

l          putc(将一指定字符写入文件中)

相关函数  fopenfwritefscanffputc

表头文件  #include<stdio.h>

定义函数  int putc(int c,FILE * stream);

函数说明  putc()会将参数c转为unsigned char写入参数stream指定的文件中。虽然putc()fputc()作用相同,但putc()为宏定义,非真正的函数调用。

返回值  putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。

范例  参考fputc()。

l          putchar(将指定的字符写到标准输出设备) 

相关函数  fopenfwritefscanffputc

表头文件  #include<stdio.h>

定义函数  int putchar (int c);

函数说明  putchar()用来将参数c字符写到标准输出设备

返回值  putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。

附加说明  putchar()非真正函数,而是putc(cstdout)宏定义。

范例  参考getchar()

 

 

 

2、    行读写文件流

l         puts(将字符串写入标准输出流stdout

相关函数  fopenfreadfscanffgets

表头文件  #include <stdio.h>

定义函数  int *puts(char *s);

函数说明  puts()s指向的空字符结尾的字符串后接换行符,但不写入终止空字符)写入标准输出流stdout

返回值    puts()若成功则返回非负整数,否则返回EOF

范例  参考fgets()

#include"stdio.h"

main()

{

static char c[] = "This is just a test\ndhaha…";                                           

puts(c);

}

从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。

l          fputs(将一指定的字符串写入文件内)

相关函数  fopenfwritefscanffputcputc

表头文件  #include<stdio.h>

定义函数  int fputs(const char * s, FILE * stream);

函数说明  fputs()用来将参数s所指的字符串写入到参数stream所指的文件内(但不追加换行符,也不写入终止空字符)。

返回值  若成功则返回写出的字符个数,返回EOF则表示有错误发生。

范例  请参考fgets()。

l         gets(从标准输入设备读进一字符串) 

相关函数  fopenfreadfscanffgets

表头文件  #include <stdio.h>

定义函数  char * gets(char *s);

函数说明  gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符读到文件尾为止,最后加上NULL作为字符串结束。

返回值  gets()若成功则返回s指针,返回NULL则表示有错误发生。

附加说明  由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用fgets()取代。

范例  参考fgets()

#include "stdio.h"

main()

{

char st[15];

printf("input string:\n");

gets(st);

puts(st);

}

可以亲自调试一下,当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束,这是与scanf函数不同的

l          fgets(由文件中读取一字符串——行读写文件流) 

相关函数  openfreadfscanfgetc

表头文件  include <stdio.h>

定义函数  char * fgets(char * s, int size, FILE * stream);

函数说明  fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束

返回值  gets()若成功则返回s指针,返回NULL则表示有错误发生。

范例  #include<stdio.h>

main()

{

         char s[80];

         fputs(fgets(s, 80, stdin), stdout);

}

执行 

this is a test /*输入*/

this is a test /*输出*/

 

3、    块读写文件流

l          fread(从文件流读取数据) 

相关函数  fopenfwritefseekfscanf

表头文件  #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>

int main(int argc, char **argv)

{

         struct student{

                   char name[10];

                   int number;

         };

         FILE *fp = NULL;

         int i;

         struct student boya[2], boyb[2], *pp, *qq;

         if(NULL == (fp = fopen("aa.txt", "w+"))){

                   perror("can not open aa.txt!");

                   return (-1);

         }

         pp = boya;

         qq = boyb;

         printf("please input two students' name and number:\n");

         for(i = 0; i < 2; i++, pp++){

                   scanf("%s\t%d", pp->name, &(pp->number));

         }

         pp = boya;

         fwrite(pp, sizeof(struct student), 2, fp);

         rewind(fp);

         fread(qq, sizeof(struct student), 2, fp);

         printf("name\t\t number\n");

         for(i = 0; i < 2; i++, qq++){

                   printf("%s\t\t %d\n", qq->name, qq->number);  

         }

         fclose(fp);

         return (0);

}

 


执行:

Holy 0

Shit 1

 

 

结果:

Name    number

Holy       0

Shit       1

 


l          fwrite(将数据写至文件流) 

相关函数  fopenfreadfseekfscanf

表头文件  #include<stdio.h>

定义函数  size_t fwrite(const void * ptr, size_t sizesize_t nmemb, FILE * stream);

函数说明  fwrite()用来将数据写入stream所指定的文件流中。参数stream为已打开的文件指针,参数ptr 指向欲被写入的数据地址,总共写入的字符数以参数size*nmemb来决定。fwrite()会返回实际写入的nmemb数目

返回值  返回实际写入的nmemb数目。

范例 参考fread()。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值