精华0
威望50
K币591 元
注册时间2017-2-21
在线时间0 小时
最后登录2018-5-21
中级战友
- 精华
- 0
- 威望
- 50
- K币
- 591 元
- 注册时间
- 2017-2-21
|
张二狗子,我要装*了!
当主函数第一次运行时.
结果:
d盘出现一个文件.
注释掉第一句,放开第二句.
结果:
代码如下,devc++下通过:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct _student
{
int id;//学生的id号,唯一且终身的.
char* name;//名字长度难确定,用指针最好.
};
typedef struct _student student;
//打印菜单项
void print_menu(void)
{
printf("学号\t\t ");
printf("姓名\n");
}
//打印学生
void print_student(student* p, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d\t\t ", p.id);
printf("%s\n", p.name);
}
}
//内存拷贝到磁盘
void stack_to_file(student* p, int n, FILE* fp)
{
int i = 0;
for (i = 0; i < n; i++)
{
fprintf(fp, "id=%d\n", p.id);
fprintf(fp, "name=%s\n", p.name);
}
return;
}
//磁盘拷贝到内存.
void file_to_stack(student* p, int n, FILE* fp)
{
int i = 0;
for (i = 0; i < n; i++)
{
fscanf(fp, "id=%d\n", &p.id);
fscanf(fp, "name=%s\n", p.name);
}
return;
}
void free_func(student** p, int n)
{
int i;
for (i = 0; i < n; i++)
{
if ((*p).name != NULL)
free((*p).name);
}
if (*p != NULL)
{
free(*p);
*p = NULL;
}
}
//判断文件打开是否成功.
void fopen_func(FILE** fp)
{
if ((*fp = fopen("d:\\aaa.txt", "r+")) != NULL)
fprintf(stderr, "文件打开成功.\n");
else
fprintf(stderr, "文件打开失败.\n");
return;
}
//关闭文件.
void fclose_func(FILE** fp)
{
if (*fp != NULL)
{
fclose(*fp);
*fp = NULL;
fprintf(stderr, "文件关闭成功.\n");
}
else
fprintf(stderr, "文件关闭失败.\n");
return;
}
void input_disk()
{
FILE* fp = NULL;
fopen_func(&fp);
student* p = (student*)malloc(sizeof(student));
(*p).id = 1001;
(*p).name = (char*)malloc(9 * sizeof(char));
strcpy((*p).name, "张二狗子");
stack_to_file(p, 1, fp);
free_func(&p, 1);
fclose_func(&fp);
return ;
}
void output_srceen()
{
FILE* fp = NULL;
fopen_func(&fp);
student* p = (student*)malloc(sizeof(student));
(*p).name = (char*)malloc(9 * sizeof(char));
file_to_stack(p, 1, fp);
print_menu();
print_student(p, 1);
free_func(&p, 1);
fclose_func(&fp);
return;
}
int main(void)
{
input_disk();
//output_srceen();//两个函数选一个.
return 0;
}
|
|