70,037
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define N 5 //结构体数组长度
struct student
{
char name[10];
int num;
int age;
char addr[30];
};
/* 输入 */
void input(struct student *p);
/* 保存 */
void save(struct student *p);
/* 载入 */
void load();
/* 读取特定学生信息 */
struct student get_stu(int n);
int main()
{
struct student stu[N], stu_i;
int n;
input(stu);
save(stu);
load();
printf("\n获取第几个学生的信息:");
scanf("%d", &n);
stu_i = get_stu(n);
printf("\n姓名\t编号\t年龄\t住址\n");
printf("%s\t%d\t%d\t%s",stu_i.name, stu_i.num, stu_i.age, stu_i.addr);
getchar();
return 0;
}
/* 输入 */
void input(struct student *p)
{
int i;
for (i = 0; i < N; i++)
{
printf("输入第%d个学生的姓名 编号 年龄 住址:\n", i+1);
scanf("%s%d%d%s", p[i].name, &p[i].num, &p[i].age, p[i].addr);
}
}
/* 保存 */
void save(struct student *p)
{
int i;
FILE *fp;
if ((fp=fopen("student.txt", "w")) == NULL)
{
printf("不能保存文件!\n");
exit(1);
}
for ( i = 0; i < N; i++)
{
fprintf(fp, "%s\t%d\t%d\t%s", p[i].name, p[i].num, p[i].age, p[i].addr);
fprintf(fp, "\r\n");
}
printf("保存文件成功!\n\n");
fclose(fp);
}
/* 载入 */
void load()
{
struct student f[N];
int i;
FILE *fp;
if ((fp = fopen("student.txt", "r")) == NULL)
{
printf("不能打开文件!\n");
exit(1);
}
for ( i = 0; i < N; i++)
{
fscanf(fp, "%s\t%d\t%d\t%s\n", f[i].name, &f[i].num, &f[i].age, f[i].addr);
printf("%s\t%d\t%d\t%s\n", f[i].name, f[i].num, f[i].age, f[i].addr);
}
fclose(fp);
}
/* 读取特定学生信息 */
struct student get_stu(int n)
{
int i;
struct student f[N];
FILE *fp;
if ((fp = fopen("student.txt", "r")) == NULL)
{
printf("不能打开文件!\n");
exit(1);
}
for ( i = 0; i < N; i++)
{
fscanf(fp, "%s\t%d\t%d\t%s", f[i].name, &f[i].num, &f[i].age, f[i].addr);
}
if ( n < 0 || n > N)
{
printf("超出范围!");
exit(1);
}
for ( i = 0; i < N; i++)
{
if (i == (n-1))
return f[n-1];
}
fclose(fp);
};
