当前位置: 代码迷 >> C语言 >> 大家来看看啊 C语言连接出错怎么办啊
  详细解决方案

大家来看看啊 C语言连接出错怎么办啊

热度:262   发布时间:2004-12-25 07:29:00.0
大家来看看啊 C语言连接出错怎么办啊

我在编下面程序的时候,连接出错了

源文件如下:

/*文件头部分 起定义作用*/ /************************************/ # include "stdio.h" # include "bios.h" # include "conio.h" # include "string.h" # define NULL 0 struct student { int num; char name[8]; int score; struct student *next; }; typedef struct student node; node *head; /************************************//************************************/ /*********添加学生信息***************//************************************/ /************************************//************************************/ creat(head) {node *p,*l; /*Q为原来的最后一个记录,L为添加后的最后一个记录*/ int d=2; l=(node*)malloc(sizeof(node)); printf("请输入新同学的信息"); printf("\n姓名:"); scanf("%s",l->name); printf("\n学号:"); scanf("%d",l->num); printf("\n成绩:"); scanf("%d",l->score); while(p=head&&head!=NULL) { while(l!=NULL) { if(strcmp(p->num,l->num)==0) {d=1;break;} if(strcmp(p->score,l->score)==0){d=1;break;} } p=p->next; while(p->next=NULL) {d=2;break;} } switch(d) { case 1:printf("你的输入有误,错误原因可能如下:\n 1:学号重复. 2:姓名重复. 3:其他原因\n"); break; case 2:{l->next=p->next; p->next=l;save();}; break; /*将L作为最后一个记录*/ } } /************************************************************************/ /******将学生成绩输出到屏幕**********************************************/ /************************************************************************/ list(head) { node *p; clrscr(); printf("\n下面是学生资料:\n"); printf(" 学号 姓名 成绩\n"); printf("---------------------------"); p=head; if(head!=NULL) do{ printf("%d %s %d\n",p->num,p->name,p->score); p=p->next; } while(p!=NULL); } /************************************//************************************/ /*****删除学生成绩**********//***********下面*******************/ /************************************//************************************/ delete(node *head) {node *q1,*q2; int m,num; clrscr(); if(head=NULL){printf("\n保存数据为空!");return(head);} q1=head; printf("请输入要删除的学生学号:"); scanf("%d",&num); while(strcmp(q1->num,num)!=0 && q1->next!=NULL){q2=q1;q1=q1->next;} if(num==q1->num) {if (q1==head)head=q1->next; else q2->next=q1->next;free(q1); printf("delete:%s\n",num); } else printf("找不到学号为%s的同学!\n",num); return(head); } /****************************************************************************/ /***************************退出退出*************退出********************/ /****************************************************************************/ end() { exit(0); } /****************************************************************************/ /***************************主函数*******************************************/ /****************************************************************************/ main() {int n; /*N为选择函数变量*/ clrscr(); gotoxy(10,10); printf("欢迎进入学生学籍管理系统"); gotoxy(10,12); printf("1:显示学生信息 2:学号查找信息"); gotoxy(10,14); printf("3:添加学生信息 4:删除学生信息"); gotoxy(10,16); printf("5:成绩查找信息 6:退出管理系统"); gotoxy(10,18); printf("请选择(1-6)"); scanf("%d",&n); switch(n) {case 1:list(head);break; case 2:NULL;break; case 3:creat(head);break; case 4:delete(head);break; case 5:NULL;break; case 6:end();break; } }

大家帮我看看是哪里出问题了?

我的QQ是359282347 欢迎大家来交流。

搜索更多相关的解决方案: C语言  

----------------解决方案--------------------------------------------------------

错误如下:

linker Error:undefined symbol'_save'in module keshe.c

我用的是TC2.0的


----------------解决方案--------------------------------------------------------

你的程序里没有定义save()这个函数,所以出现编译错误.


----------------解决方案--------------------------------------------------------

要是改正的话应该怎么改啊 ?


----------------解决方案--------------------------------------------------------

感觉你的程序做得不太完美啊!

如果你只是想编译链接成功,只需把那个creat(head)函数里的save()语句删掉就可以了,如果要想完美的运行,还要改动较大一部分啊........


----------------解决方案--------------------------------------------------------

嘿嘿 谢谢 小的是菜鸟 还忘多多指教

我要想让我输入的数据保存在一个新的文件中

用save语句来实现 应该怎么办呢?

大家来交流 ,才能共同提高。


----------------解决方案--------------------------------------------------------

# include "stdio.h" # include "string.h" # include "stdlib.h" # define NULL 0 # define MAX 5 # define TRUE 1

typedef struct node { char name[8]; int number; double score; }node;

static int recnum;

void creat() { char scorestr[100],ch,numstr[100]; node student; FILE *fp; if((fp=fopen("C:\stud.ree","wb"))==NULL) { printf("不能打开stud.ree!"); exit(0); } /*rewind(fp); 郁闷的定位函数!!! fseek(fp,recnum*sizeof(node),0); */ do { printf("\n姓名:");gets(student.name); printf("\n学号:"); gets(numstr);student.number=atoi(numstr); printf("\n成绩:"); gets(scorestr);student.score=atof(scorestr); fwrite(&student,sizeof(node),1,fp); recnum++; printf("输入其他的学生记录:(y/n)?"); ch=getchar();getchar(); }while(ch=='y'); fclose(fp); }

void list() { node student; char scorestr[100],ch; FILE *fp; if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } printf("\n下面是学生资料:\n"); printf(" 学号 姓名 成绩\n");

while(fread(&student,sizeof(node),1,fp)==1) { printf("%1d %s %6.2f\n",student.number,student.name,student.score); } fclose(fp); }

int totalrec() /*计算文件的记录数,用recnum表示总记录数*/ { node student; FILE *fp; recnum=0; if((fp=fopen("C:\stud.ree","rb"))==NULL) return 0; while(fread(&student,sizeof(node),1,fp)==1) { recnum++; } fclose(fp); return (recnum); }

searchnum() { node student; FILE *fp; int i=1; int num1; printf("\n请输入学号:"); scanf("%d",&num1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.number==num1) { printf("\n 姓名: %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n成绩: %6.2f\n",student.score); } i++; } fclose(fp); }

searchscore() { node student; FILE *fp; int i=1; double score1; printf("\n请输入成绩(小数点后保留2位):"); scanf("%lf",&score1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.score==score1) { printf("\n 姓名 : %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n年龄: %6.2f\n",student.score); } i++; } fclose(fp); }

main() {int n; /*N为选择函数变量*/ clrscr(); gotoxy(10,10); printf("欢迎进入学生学籍管理系统"); gotoxy(10,12); printf("1:显示学生信息 2:成绩查找信息"); gotoxy(10,14); printf("3:添加学生信息 4:删除学生信息"); gotoxy(10,16); printf("5:学号查找信息 6:退出管理系统");

while(TRUE) { totalrec(); printf("\n当前文件的记录数是:%d",recnum); printf("\n请选择(1-6)"); scanf("%d",&n); getchar(); switch(n) { case 1:list();break; case 2:searchscore();break; case 3:creat();break; case 4:printf("本函数尚未定义!");break; case 5:searchnum();break; case 6:exit(0);break; default :printf("\n请选择1-6这几个数字!!!"); } }

}


----------------解决方案--------------------------------------------------------

creat函数只能创建记录而不能追加,我试着用了ftell函数来进行定位,但是失败了,追加记录

是加上了但是前面的记录全都重写了(值都变成了默认值),郁闷!有哪个朋友知道怎么追加还

请赐教啊!


----------------解决方案--------------------------------------------------------

我知道怎么不能追加了,creat函数里的文件打开方式错了,应该是fopen("C:\stud.ree","ab")以追加方式打开,然后配合 rewind(fp); fseek(fp,recnum*sizeof(node),0); 语句就可以了。 下面是正确的代码! # include "stdio.h" # include "string.h" # include "stdlib.h" # define NULL 0 # define MAX 5 # define TRUE 1

typedef struct node { char name[8]; int number; double score; }node;

static int recnum;

void creat() { char scorestr[100],ch,numstr[100]; node student; FILE *fp; if((fp=fopen("C:\stud.ree","ab"))==NULL) { printf("不能打开stud.ree!"); exit(0); } rewind(fp); fseek(fp,recnum*sizeof(node),0); do { printf("\n姓名:");gets(student.name); printf("\n学号:"); gets(numstr);student.number=atoi(numstr); printf("\n成绩:"); gets(scorestr);student.score=atof(scorestr); fwrite(&student,sizeof(node),1,fp); recnum++; printf("输入其他的学生记录:(y/n)?"); ch=getchar();getchar(); }while(ch=='y'); fclose(fp); }

void list() { node student; char scorestr[100],ch; FILE *fp; if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } printf("\n下面是学生资料:\n"); printf(" 学号 姓名 成绩\n");

while(fread(&student,sizeof(node),1,fp)==1) { printf("%1d %s %6.2f\n",student.number,student.name,student.score); } fclose(fp); }

int totalrec() /*计算文件的记录数,用recnum表示总记录数*/ { node student; FILE *fp; recnum=0; if((fp=fopen("C:\stud.ree","rb"))==NULL) return 0; while(fread(&student,sizeof(node),1,fp)==1) { recnum++; } fclose(fp); return (recnum); }

searchnum() { node student; FILE *fp; int i=1; int num1; printf("\n请输入学号:"); scanf("%d",&num1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.number==num1) { printf("\n 姓名: %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n成绩: %6.2f\n",student.score); } i++; } fclose(fp); }

searchscore() { node student; FILE *fp; int i=1; double score1; printf("\n请输入成绩(小数点后保留2位):"); scanf("%lf",&score1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.score==score1) { printf("\n 姓名 : %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n年龄: %6.2f\n",student.score); } i++; } fclose(fp); }

main() {int n; /*N为选择函数变量*/ clrscr(); gotoxy(10,10); printf("欢迎进入学生学籍管理系统"); gotoxy(10,12); printf("1:显示学生信息 2:成绩查找信息"); gotoxy(10,14); printf("3:添加学生信息 4:删除学生信息"); gotoxy(10,16); printf("5:学号查找信息 6:退出管理系统");

while(TRUE) { totalrec(); printf("\n当前文件的记录数是:%d",recnum); printf("\n请选择(1-6)"); scanf("%d",&n); getchar(); switch(n) { case 1:list();break; case 2:searchscore();break; case 3:creat();break; case 4:printf("本函数尚未定义!");break; case 5:searchnum();break; case 6:exit(0);break; default :printf("\n请选择1-6这几个数字!!!"); } }

}


----------------解决方案--------------------------------------------------------
强仁啊!  我现在苦练ASP
妈妈的
个贴是不是我发的都不晓得 了

----------------解决方案--------------------------------------------------------
  相关解决方案