救急!运行总是无故退出!!

salyly 2003-09-12 03:38:13
#include<stdio.h>
struct person{ char name[8];
char id[15];
char sex[4];
char birth[10];
char prof[20];
char educat[20];
char salary[20];
char marriage[10];
};
char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delete();

main()
{ int m;

creat();
while(1)
{ printf("\n\ncreat,please enter 1");
printf("\nsearch,please enter 2");
printf("\nmodify,please enter3");
printf("\ndelete,please enter 4");
printf("\noutput,please enter 5");
printf("\nexit,please enter 0\n");
scanf("%d",&m);
if(m>=0&&m<=5)
{ switch(m)
{ case 1: append(); break;
case 2: search(); break;
case 3: modify(); break;
case 4: delete(); break;
case 5: output(); break;
case 0: exit();
}
printf("\n\nfinish,choose agian:");
}
else printf("\n\nerror,choose again:");
}
}
void creat()
{ struct person one;
long s1;

printf("\nenter file name:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{ printf("\nfail!");
exit();
}
fprintf(fp,"%-6s%-8s%-8s-8s%-8s-8s%-8s-8s\n","name","id","sex","birth","prof","educat","salary","marriage");
printf("\nenter the name,id, sex,birth,prof,educat,salary and marriage(end with0)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{ scanf("%s%s%s%s%s%s%s",one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fprintf(fp,"%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
scanf("%s",one.name);
}
fclose(fp);
}

void output()
{ struct person one;

if((fp=fopen(filename,"r"))==NULL)
{ printf("\nfail!");
exit();
}
printf("\n\n%50s\n","employee information system ");
while(!feof(fp))
{ fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);

printf("%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
}
fclose(fp);
}

void append()
{ struct person one;

if((fp=fopen(filename,"a"))==NULL)
{ printf("\nfail!");
exit();
}
printf("\nenter new created employee's name,id, sex,birth,prof,educat,salary and marriage\n");
scanf("%s%s%s%s%s%s%s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fprintf(fp,"%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fclose(fp);
}

void search()
{ int k=0;
char namekey[8];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)
{ printf("\nfail!");
exit();
}
while(!feof(fp))
{ fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{ printf("\n\nfind,here is:");
printf("\n%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
k=1;
}
}
if(!k) printf("\n\nsorry,no such one!");
fclose(fp);
}

void modify()
{ int m,k=0;
long offset;
char namekey[8];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)
{ printf("\nfail!");
exit();
}
while(!feof(fp))
{ offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{ k=1; break; }
}
if(k)
{ printf("\nfind,here is:");
printf("\n%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
printf("\nenter new name,id,sex,birth,prof,educat,salary and marriage:");
scanf("%s%s%s%s%s%s%s%s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
}
else printf("\nsorry,no such one!");
fclose(fp);
}

void delete()
{ int m,k=0,flag;
long offset1,offset2;
char namekey[8], valid[4];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{ printf("\nfail!");
exit();
}
while(!feof(fp))
{ offset1=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{ k=1; break; }
}
if(k)
{ printf("\nfind,here is:");
printf("\n%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
printf("\nsure to del,enter 1;else,enter 0:");
scanf("%d",&m);
if(m) { fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-6s%-8s%-8s-8s%-8s%-8s-8s%-8s\n","","","","","","","","");
}
}
else printf("\nsorry,no such one!");
fclose(fp);
}



...全文
26 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
arfi 2003-09-12
  • 打赏
  • 举报
回复
程序应该说没什么问题,你怎么会运行退出呢?
大部分的格式字符串,
"%-6s%-8s%-8s-8s%-8s-8s%-8s-8s\n"需要改成
"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n"
还有append()函数中的scanf中的格式串"%s%s%s%s%s%s%s"少了一个%s

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

struct person
{
char name[8];
char id[15];
char sex[4];
char birth[10];
char prof[20];
char educat[20];
char salary[20];
char marriage[10];
};

char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delet();

void main(void)
{
int m;

creat();
while(1)
{
printf("\n\ncreat,please enter 1");
printf("\nsearch,please enter 2");
printf("\nmodify,please enter3");
printf("\ndelete,please enter 4");
printf("\noutput,please enter 5");
printf("\nexit,please enter 0\n");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: append(); break;
case 2: search(); break;
case 3: modify(); break;
case 4: delet(); break;
case 5: output(); break;
case 0: exit(0);
}
printf("\n\nfinish,choose agian:");
}
else
printf("\n\nerror,choose again:");
}
}

void creat()
{
struct person one;


printf("\nenter file name:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\nfail!");
exit(1);
}
fprintf(fp,"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n","name","id","sex","birth","prof","educat","salary","marriage");
printf("\nenter the name,id, sex,birth,prof,educat,salary and marriage(end with0)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s%s%s%s%s%s",one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fprintf(fp,"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
scanf("%s",one.name);
}
fclose(fp);
}

void output()
{
struct person one;

if((fp=fopen(filename,"r"))==NULL)
{
printf("\nfail!");
exit(1);
}
printf("\n\n%50s\n","employee information system ");
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
printf("%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
}
fclose(fp);
}

void append()
{
struct person one;

if((fp=fopen(filename,"a"))==NULL)
{
printf("\nfail!");
exit(1);
}
printf("\nenter new created employee's name,id, sex,birth,prof,educat,salary and marriage\n");
scanf("%s%s%s%s%s%s%s%s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fprintf(fp,"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fclose(fp);
}

void search()
{
int k=0;
char namekey[8];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)
{
printf("\nfail!");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{
printf("\n\nfind,here is:");
printf("\n%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
k=1;
}
}
if(!k)
printf("\n\nsorry,no such one!");
fclose(fp);
}

void modify()
{
int k=0;
long offset;
char namekey[8];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)
{
printf("\nfail!");
exit(1);
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\nfind,here is:");
printf("\n%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
printf("\nenter new name,id,sex,birth,prof,educat,salary and marriage:\n");
scanf("%s%s%s%s%s%s%s%s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
}
else
printf("\nsorry,no such one!");
fclose(fp);
}

void delet()
{
int m,k=0;
long offset1;
char namekey[8];
struct person one;

printf("\nenter name:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\nfail!");
exit(1);
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s%s%s%s%s%s\n",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\nfind,here is:");
printf("\n%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s",one.name,one.id,one.sex,one.birth,one.prof,one.educat,one.salary,one.marriage);
printf("\nsure to del,enter 1;else,enter 0:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-6s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n","","","","","","","","");
}
}
else
printf("\nsorry,no such one!");
fclose(fp);
}
dddd8888 2003-09-12
  • 打赏
  • 举报
回复
运行到哪个地方退出

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧