关于Debug Assertion Failed!解决办法
关于Debug Assertion Failed!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define filename (c:\\zj.txt) //文件位置
#define N 100 //最大员工数
typedef struct member
{
char name[20];
int no;
char sex[10];
char birthday[30];
char marry[10];
int child;
}ST;
ST jober[N]; //公会成员
/************************************
登陆函数
*************************************/
void login()
{
char password[20] , username[20];
char name[20] , word[20];
int flag = 0;
FILE *fp = NULL;
if( NULL == (fp=fopen("c:\\zj.txt","rb+")) )
{
printf("不能打开文件请查找C盘根目录下是否有zj.txt!");
getchar();
exit(1);
}
fread(username,sizeof(username),1,fp);
fread(password,sizeof(password),1,fp);
printf("请输入用户名和密码并用空格隔开(默认用户名密码admin admin):");
while(flag < 3)
{
scanf("%s %s",&name[0],&word[0]);
if(strcmp(username,name) == 0 && strcmp(password,word) == 0)
break;
else
{
printf("用户名或密码错误请重新输入:");
flag++;
}
}
fclose(fp);
fp = NULL;
if(flag>2)
{
printf("密码错误次数过多 退出系统!!!");
getchar();
getchar();
exit(1);
}
}
/************************************
函数声明区
************************************/
void input(ST *a);
int select();
void pandect();
int main(void)
{
int x = 0;
login();
while(1)
{
printf("\n*******************************************\n");
printf("* *\n");
printf("* 欢迎进入公会成员管理系统 *\n");
printf("* *\n");
printf("* 请选择您需要的功能 *\n");
printf("* 1:工会成员信息录入 *\n");
printf("* 2:工会成员浏览 *\n");
printf("* 3:查询工会成员信息 *\n");
printf("* 4:工会成员信息删除 *\n");
printf("* 5:工会成员信息修改 *\n");
printf("* 6:修改密码 *\n");
printf("* 7:退出程序 *\n");
printf("* *\n");
printf("*******************************************\n");
scanf_s("%d",&x,1);
switch(x)
{
case 1: input(jober); break;
case 2: pandect(); break;
case 3: ;break;
case 4: ;break;
case 5: ;break;
case 6: ;break;
case 7:exit(1);break;
default: ;break;
}
}
return 0;
}
/***********************
选择Y / N
返回值0或者1
************************/
int select()
{
char tmp;
scanf("%c",&tmp);
if(tmp == 89 || tmp == 67)
return 1;
else if(tmp == 78 || tmp == 46)
return 0;
else
{
printf("输入错误 请重新输入!!!");
select();
}
}
/************************
信息录入
*************************/
void input(ST *a)
{
FILE *fp = NULL;
int x = 1;
fp=fopen("c:\\zj.txt","ab+");
while(x)
{
printf("请输入成员姓名,工号,性别,生日,婚否,子女数 并用空格隔开:");
printf("\n ");
scanf("%s %d %s %s %s %d",a->name,&(a->no),a->sex,a->birthday,a->marry,&(a->child));
fwrite(a,sizeof(ST),1,fp);
printf("请问还需要录入吗? Y/N :");
printf("\n");
x = select();
}
fclose(fp);
fp = NULL;
}
/************************
信息总览
************************/
void pandect()
{
FILE *fp = NULL;
int x = 0;long t;
fp = fopen("c:\\zj.txt","rb+");
fseek(fp,0L,2);
t = ftell(fp);
rewind(fp);
t = t/sizeof(ST);
printf("公会成员数:%d\n",t);
fseek(fp,40L,0);
fread(jober,sizeof(ST),100,fp);
while(x < t)
{
printf("姓名:%s 工号:%d 性别:%s \n生日:%s 婚否:%s 子女数:%d \n",jober[x].name,jober[x].no,jober[x].sex,jober[x].birthday,jober[x].marry,jober[x].child);
printf("\n");
x++;
fclose(fp);
fp = NULL;
}
}
------解决思路----------------------
fclose(fp);应在while外面
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define filename (c:\\zj.txt) //文件位置
#define N 100 //最大员工数
typedef struct member
{
char name[20];
int no;
char sex[10];
char birthday[30];
char marry[10];
int child;
}ST;
ST jober[N]; //公会成员
/************************************
登陆函数
*************************************/
void login()
{
char password[20] , username[20];
char name[20] , word[20];
int flag = 0;
FILE *fp = NULL;
if( NULL == (fp=fopen("c:\\zj.txt","rb+")) )
{
printf("不能打开文件请查找C盘根目录下是否有zj.txt!");
getchar();
exit(1);
}
fread(username,sizeof(username),1,fp);
fread(password,sizeof(password),1,fp);
printf("请输入用户名和密码并用空格隔开(默认用户名密码admin admin):");
while(flag < 3)
{
scanf("%s %s",&name[0],&word[0]);
if(strcmp(username,name) == 0 && strcmp(password,word) == 0)
break;
else
{
printf("用户名或密码错误请重新输入:");
flag++;
}
}
fclose(fp);
fp = NULL;
if(flag>2)
{
printf("密码错误次数过多 退出系统!!!");
getchar();
getchar();
exit(1);
}
}
/************************************
函数声明区
************************************/
void input(ST *a);
int select();
void pandect();
int main(void)
{
int x = 0;
login();
while(1)
{
printf("\n*******************************************\n");
printf("* *\n");
printf("* 欢迎进入公会成员管理系统 *\n");
printf("* *\n");
printf("* 请选择您需要的功能 *\n");
printf("* 1:工会成员信息录入 *\n");
printf("* 2:工会成员浏览 *\n");
printf("* 3:查询工会成员信息 *\n");
printf("* 4:工会成员信息删除 *\n");
printf("* 5:工会成员信息修改 *\n");
printf("* 6:修改密码 *\n");
printf("* 7:退出程序 *\n");
printf("* *\n");
printf("*******************************************\n");
scanf_s("%d",&x,1);
switch(x)
{
case 1: input(jober); break;
case 2: pandect(); break;
case 3: ;break;
case 4: ;break;
case 5: ;break;
case 6: ;break;
case 7:exit(1);break;
default: ;break;
}
}
return 0;
}
/***********************
选择Y / N
返回值0或者1
************************/
int select()
{
char tmp;
scanf("%c",&tmp);
if(tmp == 89 || tmp == 67)
return 1;
else if(tmp == 78 || tmp == 46)
return 0;
else
{
printf("输入错误 请重新输入!!!");
select();
}
}
/************************
信息录入
*************************/
void input(ST *a)
{
FILE *fp = NULL;
int x = 1;
fp=fopen("c:\\zj.txt","ab+");
while(x)
{
printf("请输入成员姓名,工号,性别,生日,婚否,子女数 并用空格隔开:");
printf("\n ");
scanf("%s %d %s %s %s %d",a->name,&(a->no),a->sex,a->birthday,a->marry,&(a->child));
fwrite(a,sizeof(ST),1,fp);
printf("请问还需要录入吗? Y/N :");
printf("\n");
x = select();
}
fclose(fp);
fp = NULL;
}
/************************
信息总览
************************/
void pandect()
{
FILE *fp = NULL;
int x = 0;long t;
fp = fopen("c:\\zj.txt","rb+");
fseek(fp,0L,2);
t = ftell(fp);
rewind(fp);
t = t/sizeof(ST);
printf("公会成员数:%d\n",t);
fseek(fp,40L,0);
fread(jober,sizeof(ST),100,fp);
while(x < t)
{
printf("姓名:%s 工号:%d 性别:%s \n生日:%s 婚否:%s 子女数:%d \n",jober[x].name,jober[x].no,jober[x].sex,jober[x].birthday,jober[x].marry,jober[x].child);
printf("\n");
x++;
fclose(fp);
fp = NULL;
}
}
------解决思路----------------------
fclose(fp);应在while外面