1,fgetc()的返回值是一个字符。在执行该函数读取字符遇到文件结束符,则返回文件结束标志EOF,EOF是定义在头文件stdio.h中,值为-1;EOF不是可输出的字符,不能够显示;只可以顺序的读取文件内容。
2,fputc()一般的调用形式为fputc(ch,fp);ch是要写入的字符,fp是文件的指针;如果写入成功,返回值就为该字符,否则返回值就是EOF;
(1)打开一个文件:
#include<stdio.h>
int main()
{
FILE *fp;
fp=fopen("hello.txt","w");//不加文件的路径,则文件在当前工程的目录下
/*"w"以写的方式打开文件,当不存在这个文件的时候,则新建一个文件。
如果以"r"方式打开文件,则表示,该文件应该已经存在,不能使用它打开一个并不存在的文件。*/
if(fp==NULL)
{
printf("打开文件失败!");
// exit(0);
}
fclose(fp);
return 0;
}
PS:exit(1)表示发生错误后退出程序, exit(0)表示正常退出。
(2)打开一个文件并且在屏幕上显示:
#include<stdio.h>
int main()
{
FILE *fp;
fp=fopen("hello.txt","rb+");
if(fp==NULL)
{
printf("打开文件失败!\n");
}
//将磁盘文件读出,并在屏幕上显示
char ch=fgetc(fp);
while(ch!=EOF) //while(!feof(fp)) 判断是否到达文件尾部
{ //{
putchar(ch); //ch=fgetc(fp); 先读出一个字符再进入循环,读一次文件指针后移一个字符,结束时指向EOF。
ch=fgetc(fp); //putchar(ch);
} //}
fclose(fp);
return 0;
}
在文本文件中输入:
运行结果:
可以看到,文本中的内容在控制台上得到了显示。
(3)在控制台输入数据,保存到文件中:
#include<stdio.h>
int main()
{
FILE *fp;
char ch,ch1;
fp=fopen("world.txt","w");
if(fp==NULL)
return 0;
printf("输入文件内容:\n");
while((ch=getchar())!='#')
{
fputc(ch,fp);//向文件中写入一个字符
}
fclose(fp);
//将文件内容输出到屏幕
FILE *fp1;
fp1=fopen("world.txt","r");//只读方式打开
if(fp1==NULL)
return 0;
printf("打印输出\n");
ch1=fgetc(fp1);
while(ch1!=EOF)
{
putchar(ch1);
ch1=fgetc(fp1);
}
fclose(fp1);
return 0;
}
输入以下的内容:
打开world.txt,文本显示了文件内容:
(4)将一个文件中的内容复制到拧一个文件中:
#include<stdio.h>
int main()
{
FILE *in,*out;
char ch,infile[25],outfile[25];
printf("输入要被拷贝的文件名\n");
scanf("%s",infile);
printf("输入要拷贝的文件名\n");
scanf("%s",outfile);
in=fopen(infile,"r");
if(infile==NULL)
return 0;
out=fopen(outfile,"w");
if(outfile==NULL)
return 0;
while(!feof(in))
{
ch=fgetc(in);//读出
fputc(ch,out);//写入
}
fclose(in);
fclose(out);
return 0;
}
打开两个文本文档,发现两个文本的内容是不一样的:
在控制台按照相应的指示输入:
再次打开两个文本,原来的world.txt文件中的内容被清空,hello.txt文件中的内容被复制到了world.txt中。