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"); //判断是否有源文件 没有则返回-1
return -1;
}
if (fq == NULL)
{
perror("file1 to fopen"); //判断是否有目标文件 没有则返回-1
return -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;
}