C语言文件的存储与读取问题struct结构体fscanf读取,求解答希望详细。

问题出在“//输出文本内容”的函数下面!!!!
该怎么办文件如果用fscanf如何读出来
#include<stdio.h>
#include<string.h>
struct student
{
char name[15];
char sex[5];
int year;
int number;
};

//录入数据函数
type_in()
{
int i,j;
FILE *fp;
struct student s[50];
fp=fopen("f:\\student1.txt","w");
if(fp==NULL)
{
printf("文本打开失败。");
}
printf("请输入录入学生的个数:");
scanf("%d",&i);
for(j=0;j<i;j++)
{
printf("第%d个学生的:\n",j+1);
printf("姓名:");scanf("%s",&s[j].name);getchar();//疑问如果加或不加有没有区别getchar
printf("性别:");scanf("%s",&s[j].sex);getchar();//
printf("年龄:");scanf("%d",&s[j].year);getchar();//
printf("成绩:");scanf("%d",&s[j].number);getchar();//
fprintf(fp,"姓名:%s性别:%s年龄:%d成绩:%d",s[j].name,s[j].sex,s[j].year,s[j].number);
}
fclose(fp);
//return i;
}
//输出文本内容
output(int s)
{
int i,j;
char a[300];
FILE *fpt;
fpt=fopen("f:\\student.txt","r");
if(fpt==NULL)
{
printf("文本没有创建");
}
for(i=0;i<s;i++)
{
//fscanf(fpt,"姓名:%s性别:%s年龄:%d成绩:%d",s[i].name,s[j].sex,&s[j].year,&s[j].number);//这里这么就错了求解

}

}

main()
{
int wait;
wait=type_in();
//output(wait);
//使用switch语句实现菜单选项
}

fprintf(fp,"姓名:%s 性别:%s 年龄:%d 成绩:%d\n",s[j].name,s[j].sex,s[j].year,s[j].number); 写入文件时,数据间加上分隔符

fscanf(fpt, "姓名:%s 性别:%s 年龄:%d 成绩:%d\n", s[i].name, s[j].sex, &s[j].year, &s[j].number); 与上面的格式串相同

这样再试试追问

还是不行,一用vc试试看看,这个错误是语法错误?好像是,但是我找不出来

追答#include<stdio.h>
#include<string.h>
struct student
{
char name[15];
char sex[5];
int year;
int number;
};

//录入数据函数
int type_in()
{
int i,j;
FILE *fp;
struct student s[50]; //

fp=fopen("f:\\student1.txt","w");
if(fp==NULL)
{
printf("文本打开失败。"); 
}
printf("请输入录入学生的个数:");
scanf("%d",&i);
for(j=0;j<i;j++)
{
printf("第%d个学生的:\n",j+1);
printf("姓名:");scanf("%s",&s[j].name);getchar();//疑问如果加或不加有没有区别getchar
printf("性别:");scanf("%s",&s[j].sex);getchar();//
printf("年龄:");scanf("%d",&s[j].year);getchar();//
printf("成绩:");scanf("%d",&s[j].number);getchar();//
fprintf(fp,"姓名:%s性别:%s年龄:%d成绩:%d",s[j].name,s[j].sex,s[j].year,s[j].number);
}
fclose(fp);
return i; //
}
//输出文本内容
void output(int n) //
{
int i;
struct student s[50]; //

FILE *fpt;
fpt=fopen("f:\\student.txt","r");
if(fpt==NULL)
{
printf("文本没有创建");
return ; //
}
for(i=0;i<n;i++) //
{
fscanf(fpt,"姓名:%s性别:%s年龄:%d成绩:%d",s[i].name,s[i].sex,&s[i].year,&s[i].number);
printf("姓名:%s性别:%s年龄:%d成绩:%d",s[i].name,s[i].sex,s[i].year,s[i].number);
}
fclose(fpt);
}

追问

你给出的这个代码你能给我看看你运行结果吗??我运行出来的有好多乱码

追答刚才忘了加空格了,我一开始回答的那个情况没加处理,你再试试,
//录入数据函数
int type_in()
{
....超字数,省略
    for(j=0;j<i;j++)
    {
        printf("第%d个学生的:\n",j+1);
        printf("姓名:");scanf("%s",&s[j].name);getchar();//疑问如果加或不加有没有区别getchar
        printf("性别:");scanf("%s",&s[j].sex);getchar();//
        printf("年龄:");scanf("%d",&s[j].year);getchar();//
        printf("成绩:");scanf("%d",&s[j].number);getchar();//
        fprintf(fp,"姓名:%s 性别:%s 年龄:%d 成绩:%d\n",s[j].name,s[j].sex,s[j].year,s[j].number); //《------
    }
    fclose(fp);
    return i; //
}
//输出文本内容
void output(int n) //
{
    int i;
    struct student s[50]; //
 
    FILE *fpt;
    fpt=fopen("d:\\student1.txt","r");
    if(fpt==NULL)
    {
        printf("文本没有创建");
        return ; //
    }
    for(i=0;i<n;i++) //
    {
        fscanf(fpt,"姓名:%s 性别:%s 年龄:%d 成绩:%d\n",s[i].name,s[i].sex,&s[i].year,&s[i].number); //<--------
        printf("姓名:%s 性别:%s 年龄:%d 成绩:%d\n",s[i].name,s[i].sex,s[i].year,s[i].number);
    }
    fclose(fpt);
}

温馨提示:答案为网友推荐,仅供参考
相似回答