关于C++中出现Debug Error!的问题,详情请看下面,各位高手帮帮忙!

错误:
Debug Error!program:C:\Documents and Administrator\桌面\额\Debug\Cpp1.exe
abnomal program termination
(Press Retry to debug the application)
源代码:

#include<iostream.h>
#include<string>
#include<iomanip.h>
#include<fstream>

using namespace std;

struct course
{
char cNo[10];//课程号
char cName[20];//课程名
char cSchoolroom[20];//课室
char cTeacher[20];//任课教师
int cTime;//学时
int cCredit;//学分

};
struct Course
{
course curriculum;
Course *next;
Course(){next=NULL;}
};

class Subject
{
Course *head;//头指针
Course *p;//当前指针
public:
Subject(){head=NULL;p=NULL;}
void Add();//录入新课程信息
void Delete();//删除不开课程
int Search(char d[]);//根据课程号寻找课程,返回1或0
void Show();//打印所有课程
//void ReadFile();//从文件中读出数据信息
void WriteFile();//向文件中写入信息
//void SelectCourse();//选课
};

void Subject::Add()
{
cout<<"录入几门课程信息:";
int n;
cin>>n;
head=new Course;
head->next=NULL;
Course *s;
s=head;
for(int i=0;i<n;i++)
{
p=new Course;
cout<<"\t输入课程号:";
cin>>p->curriculum.cNo;
if(Search(p->curriculum.cNo)==0)
{
cout<<"\t输入课程名:";
cin>>p->curriculum.cName;
cout<<"\t输入课时:";
cin>>p->curriculum.cTime;
cout<<"\t输入任课老师:";
cin>>p->curriculum.cTeacher;
cout<<"\t输入授课教室:";
cin>>p->curriculum.cSchoolroom;
cout<<"\t输入课程学分:";
cin>>p->curriculum.cCredit;
}
else{cout<<"\n\t已经存在该课程,不能重复添加!";}
s->next=p;
s=p;
}
s->next=NULL;
}

int Subject::Search(char d[])
{Course *f=head->next;
while(f!=NULL)
{
if(strcmp(f->curriculum.cNo,d)==0)break;
f=f->next;
}
if(f==NULL)
return 0;
else return 1;
}

void Subject::Delete()
{char t[10];
Course *q1=head->next;
Course *q2=q1->next;
cout<<"\t请问要删除课程号:";
cin>>t;
int n=0;
Course *s=head->next;
while(s!=NULL)
{
n++;
if(strcmp(s->curriculum.cNo,t))break;
s=s->next;
}
if(s==NULL)
cout<<"不存在该课程号!"<<endl;
else
for(int i=1;i<n-1;i++)
{
q1=q2;
q2=q2->next;
}
q1->next=q2->next;
cout<<"\t删除成功!"<<endl;
}

void Subject::Show()
{
Course* k=head->next;
while(k!=NULL)
{
cout<<setiosflags(ios::left)<<setw(10)<<k->curriculum.cNo
<<setw(35)<<k->curriculum.cName
<<setw(15)<<k->curriculum.cTeacher
<<setw(10)<<k->curriculum.cSchoolroom
<<setw(7)<<k->curriculum.cTime
<<setw(6)<<k->curriculum.cCredit<<endl;
k=k->next;
}

}

void Subject::WriteFile()
{
ofstream out;
Course *c=head->next;
out.open("e:\\课程信息表.txt",ios::binary|ios::app|ios::trunc);
if(!out)
{
cout<<"\t课程信息表.txt无法打开!";
abort();
}
else
while(c)
{
out.write((char*)&c,sizeof(c));
c=c->next;
}
out.close();
}
void main()
{

Subject subject;
subject.Add();
subject.Delete();

subject.Show();
subject.WriteFile();
}

1、struct course
{
char cNo[10];//课程号
char cName[20];//课程名
char cSchoolroom[20];//课室
char cTeacher[20];//任课教师
int cTime;//学时
int cCredit;//学分

};
成员没有初始化,容易造成访问越界;
建议在构造函数中对内存进行置零;

2、
Add函数中的head指向的首结点没有被使用;

3、你的cin没有验证输入数据的正确性;追问

问题应该出在函数WriterFile(),是写了个检验程序验证它时才出的错,其它运行无错,能帮满改下吗?

追答

ios::app|ios::trunc两个属性不能共存……

追问

照你改的错误还是在。。。。

追答

小伙,我提的第一点你没改吧?cin是不能为字符串做读入的

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-16
我是按下面来的、 1、用winrar解压镜像文件到非7、出现“开始安装界面”,(要注意了,不点击“高手赐教、、 不用这么麻烦,装个虚拟光驱,
第2个回答  2011-08-16
你把Debug文件夹删了再重新运行一下看看
相似回答