文件读写
1、单个字符读写
单个字符写:
格式:fputc(字符,文件指针);
功能:把字符写到文件指针指向的文件中。
例:fputc('a',fp);
fputc(ch,fp);
单个字符读:
格式:fgetc(文件指针);
功能:从文件指针指向的文件中读一个字符,返回值就是读出来的字符。
例:
ch=fgetc(fp);
总结:文本文件、二进制文件
公司要求建立一个包含10家赞助商名称的文件。(文件名为com.txt,赞助商名称为单个字符)
#include <stdio.h>
//设计一个生成com.txt文件的函数
void creatcom()
{
FILE *fp;
int i;
char ch;
fp=fopen("d:\\test\\com.txt","w"); //wb
for(i=0;i<10;i++)
{
scanf("%c",&ch);
fputc(ch,fp);
}
fclose(fp);
}
//读文件的内容
void readcom()
{
FILE *fp;
int i;
char ch;
fp=fopen("d:\\test\\com.txt","r"); //rb
for(i=0;i<10;i++)
{
ch=fgetc(fp);
printf("%c",ch);
}
fclose(fp);
}
//读任意字符个数的函数
void readcom2()
{
FILE *fp;
int i;
char ch;
fp=fopen("d:\\test\\com.txt","r"); //rb
ch=fgetc(fp);
while (ch!=EOF)
{
printf("%c",ch);
ch=fgetc(fp);
}
fclose(fp);
}
int main()
{
//creatcom();
readcom();
printf("\n");
readcom2();
printf("\n");
return 0;
}
*/
/*
改进:读任意字符个数的文件
(1)文本文件
文本文件结束标记EOF -1
(2)二进制文件
feof(文件指针):如果读出来的内容是结束标记,返回1,否则返回0
读任意个字符个数的二进制文件
void readcom3()
{
FILE *fp;
char ch;
fp=fopen("d:\\test\\comb.txt","rb");
ch=fgetc(fp);
while (!feof(fp))
{
printf("%c",ch);
ch=fgetc(fp);
}
fclose(fp);
}
*/
/*
统计文件由多少个a字符?
int count()
{
FILE *fp;
int i=0;
char ch;
fp=fopen("d:\\test\\com.txt","r"); //rb
ch=fgetc(fp);
while (ch!=EOF)
{
if (ch=='a') i++;
ch=fgetc(fp);
}
fclose(fp);
return i;
}
*/
/*
将一个文本文件内容加密(tt1.txt,mitt1.txt)。
加密规则:输入一个正整数k,将所有小写英文字母后移k个位置。(0<k<=20)
如k=3,则'a'-->'d','b'-->'e','c'-->'f',......,'y'-->'b','z'-->'c'
分析:
ch
if (ch+k>'z')
ch=ch+k-26;
else
ch=ch+k;
*/
#include <stdio.h>
//设计一个生成com.txt文件的函数
void creatcom()
{
FILE *fp;
int i;
char ch;
fp=fopen("d:\\test\\tt1.txt","w"); //wb
for(i=0;i<40;i++)
{
scanf("%c",&ch);
fputc(ch,fp);
}
fclose(fp);
}
void encrypt(int k)
{
FILE *fp1,*fp2;
char ch;
fp1=fopen("d:\\test\\tt1.txt","r");
fp2=fopen("d:\\test\\mitt1.txt","w");
ch=fgetc(fp1);
while (ch!=EOF)
{
if (ch+k>'z')
ch=ch+k-26;
else
ch=ch+k;
fputc(ch,fp2);
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
void readcom2()
{
FILE *fp;
int i;
char ch;
fp=fopen("d:\\test\\mitt1.txt","r"); //rb
ch=fgetc(fp);
while (ch!=EOF)
{
printf("%c",ch);
ch=fgetc(fp);
}
fclose(fp);
}
int main()
{
int k;
//creatcom();
scanf("%d",&k);
encrypt(k);
readcom2();
return 0;
}
/*
强调:
while (ch!=EOF)
{
if (ch+k>'z')
ch=ch+k-26;
else
ch=ch+k;
fputc(ch,fp2);
ch=fgetc(fp1);
}
或
while (ch!=EOF)
{
ch=ch+k;
//ch定义的变量时char,最大值127, ‘z' 122 +10 132 溢出
if (ch>'z')
ch=ch-26;
fputc(ch,fp2);
ch=fgetc(fp1);
}
补充:文本文件中,换行符为‘\n',二进制文件中,换行符为'\r''\n'