1.函数接口
(1).fgetc:
int fgetc(FILE *stream);
功能:从流中度区下一个字符
参数:
stream:文件流指针
返回:
成功返回ASCII值 失败返回 EOF 读到文件末尾返回EOF
练习:
读出文件内容的行数
#include <stdio.h>int main (void)
{FILE *fp = NULL;char ch = 0 ;fp = fopen ("file.txt","r");if (fp ==NULL){perror("file to fopen");return -1;}int i = 0;while(1){ch = fgetc(fp);if (ch == '\n'){++i;}if (EOF == ch){ break;}// printf ("ch = %c\n",ch);}printf ("len = %d\n",i);fclose(fp);return 0;
}
(2).fgetc/fputc与getchar/putchar的区别 (等价)
char ch = 0;
ch = getchar();
ch = fgetc(stdin);
char ch = 'a'
putchar(ch);
fputc(ch, stdout);
练习:
实现将一个文件中的内容拷贝到另一个文件中
#include <stdio.h>int main (void)
{FILE *fp = NULL; char ch = 0 ;FILE *fq = NULL; //定义两个文件的指针流 fp = fopen ("file.txt","r"); //读取源文件并用fp接收fq = fopen ("file1.txt","w"); //创建一个文件并写入 用fq接收if (fp == NULL) {perror("file to fopen"); //判断是否有源文件 没有则返回-1return -1;}if (fq == NULL){perror("file1 to fopen"); //判断是否有目标文件 没有则返回-1return -1;}while(1) //进入循环{ch = fgetc(fp); //将源文件读到的每个字符用ch接收if (EOF == ch){ break; //直到将最后一个字符读完 跳出循环}fputc(ch,fq); //将读到的每个字符依次写入到目标文件中}fclose(fp); fclose(fq); //释放掉这两个文件指针的缓冲区return 0;
}
(3).fputs
int fputs(const char *s,FILE *stream);
功能:向流写入一个字符串
参数:
s:字符串收首地址
stream:文件流指针
返回值:成功返回非负数 失败返回EOF
练习:
将一个一组数组的一个字符串写入到指定文件按中
#include <stdio.h>int main (void)
{ FILE *fp = NULL;char s[30] = {"hello world"};fp = fopen("file2.txt","w"); if (fp == NULL){perror("file to fopen!");return -1;}fputs(s,fp);fclose(fp);return 0;
}
(4).fgets
char *fgets(char *s,int size,FILE *stream);
功能:从流中读取一个字符串
参数:
s:存放字符串空的首地址
size:最多读取字符的个数
stream:文件流指针
返回值:成功返回存放文件字符串的首地址 失败返回NULL 读到文件末尾返回NULL
练习:
将指定文件的指定字符串中的指定个数的字符读到所定义的数组中
#include <stdio.h>int main(void)
{FILE *fp = NULL;char tmpbuff[3] = {0};fp = fopen("file.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}fgets(tmpbuff, sizeof(tmpbuff), fp);printf("tmpbuff = %s\n", tmpbuff);fclose(fp);return 0;
}