1.C语言是通过什么方式读取文件的或写入文件的?
FILE *fp; //定义文件变量。指针型
if((fp=fopen("D:\\stu_list.txt","wb"))==NULL){ //注意:是D:\\,打开 不是 D:\:转义字符\:\\才能读出\
//自己会建立文件,。fp不为空,如果读取不到,就返回下面这句话。创建文件,文件变量为:fp
printf("cannot open file \n");
return;
}
写入内容:
在主函数已经给stud结构体成员变量:赋值了
怎么把结构体成员值写入文件中?
for(i=0;i<n;i++){
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1){
//fwrite(结构体变量地址,sizeof(存储空间),count,fp)
把fwrite:读取的内容给:fp
count是:如果写入成功就会·输出count,用于判断语句
是否写入成功
printf("file write error\n");
}
代码1写入文件:
#include<stdio.h>
#define SIZE 50
struct student{
char name[10];
char num[4];
int age;
char tel[10];
}stud[SIZE];
void save (int N){
FILE *fp;
int n,i;
n=N;
if((fp=fopen("D:\\stu_list.txt","wb"))==NULL){ //注意:是D:\\,打开 不是 D:\:转义字符\:\\才能读出\
//自己会建立文件,
printf("cannot open file \n");
return;
}else{
printf("1111");
}
for(i=0;i<n;i++){
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1){
printf("file write error\n");
}else{
printf("22");
}
//这一个
// printf("file write error\n");
// return 0;
}
fclose(fp); //关闭写入文件
}
// fclose(fp);
int main(){
int n,i;
printf("请输入学生数据n=");
scanf("%d",&n);
printf("\n请输入%d个学生的(姓名 学号 年龄 电话)\n",n);
for(i=0;i<n;i++){
scanf("%s%s%d%s",&stud[i].name,&stud[i].num,&stud[i].age,&stud[i].tel);
}
save(n);
}
效果:
这里看:
2.stud[i].age:这个读取乱码.这个是int 型
本来是:18,写入文件中:乱码
3. 如果再读取这个文本的内容:就能
if((fp=fopen(“D:\stu_list.txt”,“rb”))==NULL){ //注意:是D:\,打开 不是 D:\:转义字符:\才能读出\ ,rb读取
while(!feof(fp)) //这个是:读取文本,遇到文本的结尾就跳跳出循环
#include<stdio.h>
#define SIZE 50
struct student{
char name[10];
char num[4];
int age;
char tel[10];
}stud[SIZE];
void save (int N){
FILE *fp;
int n,i;
n=N;
if((fp=fopen("D:\\stu_list.txt","rb"))==NULL){ //注意:是D:\\,打开 不是 D:\:转义字符\:\\才能读出\
//自己会建立文件, rb是读取
printf("cannot open file \n");
return;
}else{
printf("1111");
i=0;
}
while(!feof(fp)) //feof(fp)
{
if(fread(&stud[i],sizeof(struct student),1,fp)==1)
{
i++;
n++;
}
}
for(i=0;i<n;i++){
printf("姓名:%s 学号:%s 年龄: %d 电话:%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].tel);
}
}
int main(){
int n=0;
//printf("请输入学生数据n=");
//scanf("%d",&n);
//printf("\n请输入%d个学生的(姓名 学号 年龄 电话)\n",n);
//for(i=0;i<n;i++){
// scanf("%s%s%d%s",&stud[i].name,&stud[i].num,&stud[i].age,&stud[i].tel);
save(n);
}
能把int型的读取出来。
就是fwrite();写入数值显示乱码错误//int double,
fread(); 读取正常