在上一节的学习中我们了解了C语言中如何进行文件的打开和关闭,而在实际的程序编写过程中我们也常常运用到字符形式来读写文件。那么究竟我们怎样在在C语言中运用字符形式来进行文件的读写呢?下面课课家笔者就为大家介绍如何利用字符形式来进行文件的读写。
通过字符形式读写文件的优点是比较灵活,不仅可以每次读写一个字符,还可以读写一个字符串,甚至是任意字节的数据(数据块)。在我们以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。我们在使用字符形式读写文件时主要使用两个函数:fgetc()和fputc()。
◎字符读取函数fgetc
fgetc是filegetchar的缩写,它的意思是从指定的文件中读取一个字符,原型为:intfgetc(FILE*fp);,这里的fp为文件指针。fgetc()读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF。EOF是endoffile的缩写,表示文件末尾,是在stdio.h中定义的宏,它的值是一个负数并且往往是-1。返回值类型之所以为int,就是为了容纳这个负数(char不能是负数)。EOF不绝对是-1,也可以是其他负数,具体要根据编译器的情况而定。下面笔者给大家演示fgetc()的使用举例:
charch;
FILE*fp=fopen("D:\\\\demo.txt","r+");
ch=fgetc(fp);
上述代码表示从D:\\\\demo.txt文件中读取一个字符并保存到变量ch中。在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该指针会向后移动一个字节,所以可以连续多次使用fgetc读取多个字符。
PS:这个文件内部的位置指针与C语言中的指针不是同一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址。文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是透明的。下面笔者给大家演示在屏幕上显示D:\\\\demo.txt文件的内容。
#include
intmain(){
FILE*fp;
charch;
//如果文件不存在,给出提示并退出
if((fp=fopen("D:\\\\demo.txt","rt"))==NULL){
printf("Cannotopenfile,pressanykeytoexit!");
getch();
exit(1);
}
//每次读取一个字节,直到读取完毕
while((ch=fgetc(fp))!=EOF){
putchar(ch);
}
putchar('\\n');//输出换行符
fclose(fp);
return0;
}
在D盘下创建demo.txt文件,输入任意内容并保存,运行程序我们就会看到刚才输入的内容全部都显示在屏幕上。该程序的功能是从文件中逐个读取字符并使之在屏幕上显示,直到读取完毕。在这里程序第14行是关键,while循环的条件为(ch=fgetc(fp))!=EOF。fget()每次从位置指针所在的位置读取一个字符并保存到变量ch,位置指针向后移动一个字节。当文件指针移动到文件末尾时,fget()就无法读取字符了,于是返回EOF,此时表示文件读取结束了。
我们知道EOF本来表示文件末尾,意味着读取结束,但是很多函数在读取出错时也返回EOF,那么当返回EOF时,判断文件读取完毕了还是读取出错的方法是借助stdio.h中的两个函数来判断,具体分别是feof()和ferror()。feof()函数用来判断文件内部指针是否指向了文件末尾,它的原型是:intfeof(FILE*fp);。当指向文件末尾时返回非零值,否则返回零值。ferror()函数用来判断文件操作是否出错,它的原型是:intferror(FILE*fp);。出错时返回非零值,否则返回零值。在这里需要给大家说明的是,文件出错是非常少见的情况,上面的示例基本能够保证将文件内的数据读取完毕。为了小心谨慎,我们也可以加上判断并给出提示:
#include
intmain(){
FILE*fp;
charch;
//如果文件不存在,给出提示并退出
if((fp=fopen("D:\\\\demo.txt","rt"))==NULL){
printf("Cannotopenfile,pressanykeytoexit!");
getch();
exit(1);
}
//每次读取一个字节,直到读取完毕
while((ch=fgetc(fp))!=EOF){
putchar(ch);
}
putchar('\\n');//输出换行符
if(ferror(fp)){
puts("读取出错");
}else{
puts("读取成功");
}
fclose(fp);
return0;
}
如此一来不管是出错还是正常读取,我们都能够做到心中有数。
◎字符写入函数fputc
fputc是fileoutputchar的所以,意思是向指定的文件中写入一个字符。调用的形式为:intfputc(intch,FILE*fp);。ch为要写入的字符,fp为文件指针。fputc()写入成功时返回写入的字符,失败时返回EOF,返回值类型为int也是为了容纳这个负数,具体比如:
fputc('a',fp);
或者:
charch='a';
fputc(ch,fp);
上述代码式表示把字符'a'写入fp所指向的文件中。此时我们需要注意两点:
①被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容并将写入的字符放在文件开头。如需保留原有文件内容并把写入的字符放在文件末尾,我们就必须以追加方式打开文件。不管以何种方式打开,被写入的文件若不存在时则创建该文件。
②每写入一个字符,文件内部位置指针向后移动一个字节。
下面笔者以从键盘输入一行字符,写入文件为例,具体代码如下:
#include
intmain(){
FILE*fp;
charch;
//判断文件是否成功打开
if((fp=fopen("D:\\\\demo.txt","wt+"))==NULL){
printf("Cannotopenfile,pressanykeytoexit!\\n");
getch();
exit(1);
}
printf("Inputastring:\\n");
//每次从键盘读取一个字符并写入文件
while((ch=getchar())!='\\n'){
fputc(ch,fp);
}
fclose(fp);
return0;
}
此时我们运行程序,输入一行字符并按回车键结束,打开D盘下的demo.txt文件,我们就可以看到刚才输入的内容。程序每次从键盘读取一个字符并写入文件,直到按下回车键,while条件不成立,结束读取。
本次简单通过字符形式读写文件的讲解到此暂告一段落,如果以后有什么内容进行补充或者修改的话,笔者会继续在此进行补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解能够对大家学习C语言起到一定的帮助作用!
¥399.00
¥498.00
¥299.00
¥29.00