c语言linker error问题

char_xp 2016-09-05 02:40:14
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"

struct customer /*顾客*/
{
char name[8];
char origin[10];
char terminal[10];
int time;
int train_num;
int seat_num;
}CUS[500]={{"jinan","dalian",1,8,1},{"hainan","shanghai",8,15,1}};
struct train /*火车*/
{
char origin[10];
char terminal[10];
int num;
int time;
int seat_num;
int train_num;
}TRAIN[20]={{"jinan","dalian",1,8,1},{"hainan","dalian",2,9,1},{"fujian","changsha",3,10,1},{"hainan","jinan",4,11,1},{"dalian","fujian",5,12,1},{"hainan","changsha",6,13,1},{"chongqing","shanghai",7,14,1},{"hainan","shanghai",8,15,1},{"chongqing","jinan",9,16,1},{"changsha","shanghai",10,17,1},{"changsha","fujian",11,18,1},{"changsha","dalia",12,19,1},{"chongqing","fujian",13,20,1},{"shanghai","fujian",14,21,1},{"jinan","fujian",15,22,1},{"fujian","hainan",16,23,1},{"chongqing","hainan",17,24,1},{"dalian","fujian",18,1,1},{"chongqing","dalian",19,2,1},{"changsha","jinan",20,3,1}};
void save_train() /*火车数据存储*/
{
FILE *fp;
int i;
if((fp=fopen("train.dat","wb+"))==NULL)
{
printf("the file can not open\n");
return;
}

for(i=0;i<3;i++)
{
if(fwrite(&TRAIN,sizeof(struct train),1,fp)!=1)
printf("error\n");
}
fclose(fp);
}

void save_cus() /*顾客数据存储*/
{
FILE *fp;
int i;

if((fp=fopen("customer.dat","wb+"))==NULL)
{
printf("the file can not open\n");
return;
}
for(i=0;i<3;i++)
{
if(fwrite(&CUS,sizeof(struct customer),1,fp)!=1)
printf("error\n");
}
fclose(fp);
}

void reserve(char origin[],char terminal[],char name[]) /*预定*/
{
FILE *fp1,*fp2;
int i,j,n;
if((fp1=fopen("train.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
if((fp2=fopen("customer.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
for(i=0;fread(&TRAIN[i],sizeof(struct train),1,fp1)!=0;i++)
{}

for(j=0;fread(&CUS[j],sizeof(struct customer),1,fp2)!=0;j++)
{}

n=j;
for(i=0;i<3;i++)
{
if(strcmp(origin,TRAIN[i].origin)==0&&strcmp(terminal,TRAIN[i].terminal)==0)
{
if(TRAIN[i].seat_num<=500)
{
TRAIN[i].seat_num=TRAIN[i].seat_num+1;
strcpy(CUS[n].name,name);
strcpy(CUS[n].origin,TRAIN[i].origin);
strcpy(CUS[n].terminal,TRAIN[i].terminal);
printf("\tname train_num seat_num\t\n");
printf("\t%-10s%-10s %6d\t\n",CUS[n].name,CUS[n].train_num,CUS[n].seat_num);
fclose(fp1);
fclose(fp2);
save_train();
}
if((fp2=fopen("customer.dat","w"))==NULL)
{
printf("the file can not open\n");
return;
}
for(j=0;j<n;j++)
{
if(fwrite(&CUS[j],sizeof(struct customer),1,fp2)!=1)
printf("error\n");
}
fclose(fp2);
}}}
void change(char origin[],char terminal[],char name[]) /*改签*/
{
FILE *fp1,*fp2;
int i,j,n=0,k=0;
if((fp1=fopen("train.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
if((fp2=fopen("customer.dat","r+"))==NULL)
{
printf("the file can not open\n");
return;
}
for(i=0;fread(&TRAIN[i],sizeof(struct train),1,fp1)!=0;i++)
{}
for(j=0;fread(&CUS[j],sizeof(struct customer),1,fp2)!=0;j++)
{}
n=j;
for(i=0;i<3;i++)
{
if(strcmp(origin,TRAIN[i].origin)==0 && strcmp(terminal,TRAIN[i].terminal)==0)
{
for(j=0;j<n;j++)
if(strcmp(name,CUS[j].name)==0)
{ k=j;
TRAIN[i].seat_num=TRAIN[i].seat_num-1;
for(j=k;j<n;j++)
{ strcpy(CUS[j].name,CUS[j+1].name);
strcpy(CUS[j].origin,CUS[j+1].origin);
strcpy(CUS[j].terminal,CUS[j+1].terminal);

}
printf("return ticket successed!");
fclose(fp1);
fclose(fp2);
save_train();
if((fp2=fopen("customer.dat","w"))==NULL)
{
printf("the file can not open\n");
return;
}
for(j=0;j<n;j++)
{
if(fwrite(&CUS[j],sizeof(struct customer),1,fp2)!=1)
printf("error\n");
}
fclose(fp2);
}
else printf("No the customer");
}
else printf("No the train");
}


n=j;
for(i=0;i<3;i++)
{
if(strcmp(origin,TRAIN[i].origin)==0 && strcmp(terminal,TRAIN[i].terminal)==0)
{
If(TRAIN[i].seat_num<=500);
{

TRAIN[i].seat_num=TRAIN[i].seat_num+1;
strcpy(CUS[n].name,name);
strcpy(CUS[n].origin,TRAIN[i].origin);
strcpy(CUS[n].terminal,TRAIN[i].terminal);
printf("\tname train_num seat_num\t\n");
printf("\t%-10s%-10s %6d\t\n",CUS[n].name,CUS[n].train_num,CUS[n].seat_num);
fclose(fp1);
fclose(fp2);
}}}}
void endorse(char origin[],char terminal[],char name[]) /*退票*/
{
FILE *fp1,*fp2;
int i,j,n=0,k=0;
if((fp1=fopen("train.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
if((fp2=fopen("customer.dat","r+"))==NULL)
{
printf("the file can not open\n");
return;
}
for(i=0;fread(&TRAIN[i],sizeof(struct train),1,fp1)!=0;i++)
{}
for(j=0;fread(&CUS[j],sizeof(struct customer),1,fp2)!=0;j++)
{}
n=j;
for(i=0;i<3;i++)
{
if(strcmp(origin,TRAIN[i].origin)==0&&strcmp(terminal,TRAIN[i].terminal)==0)
{
for(j=0;j<n;j++)
if(strcmp(name,CUS[j].name)==0)
{ k=j;
TRAIN[i].seat_num=TRAIN[i].seat_num-1;
for(j=k;j<n;j++)
{ strcpy(CUS[j].name,CUS[j+1].name);
strcpy(CUS[j].origin,CUS[j+1].origin);
strcpy(CUS[j].terminal,CUS[j+1].terminal);

}
printf("return ticket successed!");
fclose(fp1);
fclose(fp2);
save_train();
if((fp2=fopen("customer.dat","w"))==NULL)
{
printf("the file can not open\n");
return;
}
for(j=0;j<n;j++)
{
if(fwrite(&CUS[j],sizeof(struct customer),1,fp2)!=1)
printf("error\n");
}
fclose(fp2);
}
else printf("No the customer");
}
else printf("No the train");
}

}

void seek(char origin[],char terminal[]) /*查找*/
{

FILE *fp1,*fp2;
int i,j,n;
if((fp1=fopen("train.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
if((fp2=fopen("customer.dat","r+"))==NULL)
{
printf("the file can not open.\n");
return;
}
for(i=0;fread(&TRAIN[i],sizeof(struct train),1,fp1)!=0;i++)
{}

for(j=0;fread(&CUS[j],sizeof(struct customer),1,fp2)!=0;j++)
{}

n=j;
for(i=0;i<3;i++)
{
if(strcmp(origin,TRAIN[i].origin)==0&&strcmp(terminal,TRAIN[i].terminal)==0)
{
if(TRAIN[i].seat_num<500)
{


strcpy(TRAIN[n].origin,origin);
strcpy(TRAIN[n].terminal,terminal);
printf("\tname train_num seat_num\t\n");
printf("\t%-10s%-10s %6d\t\n",TRAIN[n].num,TRAIN[n].train_num,TRAIN[n].seat_num);
fclose(fp1);
fclose(fp2);
}}}}

void main() /*主函数*/
{

int *p;
char origin[8],terminal[8],name[8];
FILE *fp;
/*///////////////////////////////关于文件//////////////////////////////////*/
if ((fp = fopen("user.txt","r"))==NULL) /*如果此文件不存在*/
{
if ((fp = fopen("user.txt","w"))==NULL)
{
printf("can't bulid!%s","user.txt");
exit(1);
}
}
fclose(fp);

save_train();
save_cus();
start();
loop: getchar();
printf("please input your chioce:");
scanf("%d",&p);

switch(*p)
{
case1:
printf("Please input your origin:");
scanf("%s",&origin);
printf("Please input your terminal:");
scanf("%s",&terminal);
printf("Please input your name:");
scanf("%s",&name);

reserve(origin,terminal,name); break;
case2:
printf("please input the origin:");
scanf("%s",&origin);
printf("Please input the terminal:");
scanf("%s",&terminal);
printf("Please input your name:");
scanf("%s",&name);
change(origin,terminal,name); break;
case3:

endorse(origin,terminal,name); break;
case4:
seek(origin,terminal); break;

default:{ start(); goto loop;}
}
getch();
}

调试成功,但运行时出现linker error:undifened symbol "_If" in module NEW.C
因为字符数太多,超过10000字符,所以删去了界面部分的代码,但界面部分的代码我单独运行过,成功了。
...全文
474 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-09-06
  • 打赏
  • 举报
回复
楼主会“编辑”,“查找”吗?
paschen 2016-09-05
  • 打赏
  • 举报
回复
change函数中: If(TRAIN[i].seat_num<=500); 改成 if(TRAIN[i].seat_num<=500);
小灸舞 版主 2016-09-05
  • 打赏
  • 举报
回复
177行:If应该是if
PS:你的start函数是啥,看不到声明和定义
char_xp 2016-09-05
  • 打赏
  • 举报
回复
代码要怎么改
赵4老师 2016-09-05
  • 打赏
  • 举报
回复
If(TRAIN[i].seat_num<=500); 改为 if(TRAIN[i].seat_num<=500); 关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
pengzhixi 2016-09-05
  • 打赏
  • 举报
回复
提示不是很明显了么 文件名 然后哪个符号没定义。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

69,373

社区成员

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

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