C文件的有关基础知识
什么是文件?
(1)程序文件
(2)数据文件
10.1
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch,filename[10];
printf("请输入所用的用户名:");
scanf("%s",filename);
//printf("\n");
getchar();
if((fp==fopen(filename,"r")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("请输入一个准备存储到磁盘的字符串,以#结束:");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
putchar(10);
return 0;
}
10.2
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch,infile[10],outfile[10];
printf("输入读入的用户名:");
scanf("%s",infile);
printf("输入输出的用户名:");
scanf("%s",outfile);
//printf("\n");
// getchar();
if((in=fopen(infile,"r")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
if((out=fopen(outfile,"r")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
ch=fgetc(in);
/* printf("请输入一个准备存储到磁盘的字符串,以#结束:");
while(ch!='#')
{
fputc(ch,in);
putchar(ch);
ch=getchar();
}
*/
while(!feof(in))
{
fputc(ch,out);
putchar(ch);
ch=fgetc(in);
}
fclose(in);
putchar(10);
fclose(out);
return 0;
}
10.3
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char str[3][10],temp[10];
int i,j,k,n=3;
printf("enter strings:\n");
for(i=0;i<n;i++)
{
gets(str[i]);
}
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(str[k],str[j])>0) k=j;
if(k!=i)
{
strcpy(temp,str[i]);
strcpy(str[i],str[k]);
strcpy(str[k],temp);
}
}
}
if((fp=fopen("D:\\CC\\string.dat","w")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("The new sequence:\n");
for(i=0;i<n;i++)
{
fputs(str[i],fp);
fputs("\n",fp);
printf("%s\n",str[i]);
}
return 0;
}
10.4
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stu[10];
int main()
{
void save();
int i;
printf("please enter data of students:\n");
for(i=0;i<10;i++)
{
scanf("%s%d%d%d",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
}
save();
return 0;
}
void save()
{
int i;
FILE *fp;
if((fp=fopen("stu.dat","wb")) == NULL )
{
printf("cannot open file\n");
return;
}
for(i=0;i<10;i++)
{
if(fwrite(&stu[i],sizeof(struct Student_type),1,fp) !=1)
{
printf("file write error\n");
}
}
fclose(fp);
}
10.5
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp1,*fp2;
char ch,filename[10];
printf("请输入所用的用户名:");
scanf("%s",filename);
//printf("\n");
getchar();
if((fp1==fopen(filename,"r")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("请输入一个准备存储到磁盘的字符串,以#结束:");
ch=getchar();
while(ch!='#')
{
fputc(ch,fp1);
putchar(ch);
ch=getchar();
}
//fclose(fp1);
putchar(10);
fp1=fopen("file1.dat","r");
fp2=fopen("file2.dat","w");
ch=getc(fp1);
while(ch!=EOF)
{
putchar(ch);
ch=getc(fp1);
}
putchar(10);
rewind(fp1);
ch=getc(fp1);
while(ch!=EOF)
{
fputc(ch,fp2);
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
10.6
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stu[10];
int main()
{
int i;
FILE *fp;
if((fp=fopen("stu.dat","rb")) == NULL )
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<10;i+=2)
{
fseek(fp,i*sizeof(struct Student_type),0);
fread(&stu[i],sizeof(struct Student_type),1,fp);
printf("%10s%4d%4d%15s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
}
fclose(fp);
return 0;
}