匿名用户
1级
2010-01-23 回答
/********************
程序功能:
输入学生信息,存盘,
并能按名字找对应的学生,找到则
输出,否则输出无此人
********************/
#include
#include
/*定义学生人数*/
#define N 3
/*名字和性别长度*/
#define NO 20
/****结构体存信息更多的信息随便加****/
typedef struct student
{
char sname[NO];
char ssex[NO];
int snumber;
}stu;
/**输出找到信息**/
void display(stu ss)
{
printf("information of student:\nname:\tsex:\tnumber:\n");
printf("%s %s %d\n", ss.sname, ss.ssex, ss.snumber);
}
/***************
处理输入的字符,原因很多(主要是数组和指针的转
换带来的问题,这是比较底层的东西),如果少了这个
就会出错,怪就怪系统函数做得不太好。
有些东西还是得自己出马写的
****************/
void do_Char(char *ch)
{
int i;
for (i = 0; i < NO; i++)
{
if (0 != ch[i] && '\0' != ch[i]);
else break;
}
if (NO == i)
{
i--;
}
ch[i] = '\0';
}
/****************************
读取信息,即初始化存入文件*** gets(chname);
**************************/
void getInformation(stu s[])
{
FILE *pf = NULL;
char chname[NO];
char chsex[NO];
int number;
int i;
if (NULL == (pf = fopen("studenInformatio.txt", "wb")))
{
printf("fopen error !");
exit(0);
}
for (i = 0; i < N; i++)
{
printf("input the name:\tsex:\tnumber:\n");
gets(chname);
do_Char(chname);
gets(chsex);
do_Char(chsex);
scanf("%d", &number);
strcpy(s[i].sname, chname);
strcpy(s[i].ssex, chsex);
s[i].snumber = number;
fwrite(&s[i], sizeof(stu), 1, pf);
display(s[i]);
/********************
清空绶存的,这也是系统函数的原因,如果少了这个
就会把上次输入的回车作为下次还要输入的内容,这个也
是没办法的,不信你自己改下,会令人想不通的东西出现在你面前
***********************/
flushall();
}
fclose(pf);
}
/****按名字查找****/
void find()
{
FILE *pf = NULL;
char chname[N];
stu s[N];
int i;
if (NULL == (pf = fopen("studenInformation.txt", "rb")))
{
printf("fopen error !");
exit(0);
}
for (i = 0; i < N; i++)
{
fread(&s[i], sizeof(stu), 1, pf);
}
for (i = 0; i < N; i++)
display(s[i]);
printf("input the name of you will find:\n");
scanf("%s", chname);
for (i = 0; i < N; i++)
{
if (0 == strcmp(s[i].sname, chname))
{
display(s[i]);
break;
}
}
if (N == i)
{
printf("not find this struden.\n");
}
fclose(pf);
}
/***驱动程序***/
void main()
{
stu st[N];
getInformation(st);
find();
getch();
}
已通过上机,这里说下,不要相信库函数总是最好的.
希望你也有同感,如果要我举例那又会是几百字以上的东西了.
你多做几个大一点的(500行左右)程序就知道了.
上千行你会发现更多你没见过书上从来没有的东西.