文件2

作者: 时间:2020-07-09 点击数:

文件读写
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'

 

Copyright© 2020 Anyang Institute of Technology.All rights reserved.

学院地址:河南省安阳市黄河大道西段