C++程序纠错:可以运行,但总是进入到死循环……而且文件的写入也有问题……

#include<string>#include<fstream>#include<iostream>usingnamespacestd;classstudent{pub... #include<string>
#include<fstream>
#include<iostream>
using namespace std;
class student
{
public:
char name[30]; //学生姓名
char intime[100]; //入学时间
char offtime[100]; //离校时间
char reason[100]; //离校原因
char number[10]; //学号
char grade[40]; //年级
char Class; //班级
char fee; //学费金额
student()//构造函数及其初始化
{
name[0]='?';
intime[0]='?';
offtime[0]='?';
reason[0]='?';
number[10]=0;
grade[40]='?';
Class=0;
fee=0;
}

void Create_xueji()
{

int i;
cout<<"现在创建学生学籍信息表\n";
student stu[100]; //类的对象数组
ofstream xuejifile;
xuejifile.open("XUEJI.txt",ios::app);
if(!xuejifile)//调用重载算符函数测试流
{
cerr<<"打开文件错误!"<<endl;
abort();//结束
}
xuejifile<<"信息科学与工程学院学生学籍信息"<<endl;
cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
cout<<"请按顺序输入学生的\n学号,姓名,年级,班级\n入学时间,学费金额,离校时间(如果仍未离校则填写“暂无”),离校原因(如果仍未离校则填写“暂无”)。"<<endl;
cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n";

for(i=0;cin>>stu[i].number>>stu[i].name>>stu[i].grade>>stu[i].Class>>stu[i].intime>>stu[i].fee>>stu[i].offtime>>stu[i].reason;i++) {
xuejifile<<"学号"<<stu[i].number<<"\t";
xuejifile<<"姓名"<<stu[i].name<<"\t";
xuejifile<<"年级"<<stu[i].grade<<"\t";
xuejifile<<"班级"<<stu[i].Class<<"\t";
xuejifile<<"入学时间"<<stu[i].intime<<"\t";
xuejifile<<"学费金额"<<stu[i].fee<<"\t";
xuejifile<<"离校时间"<<stu[i].offtime<<"\t";
xuejifile<<"离校原因"<<stu[i].reason<<"\t\n";

}
xuejifile.close();
}

void main()
{
student stu[50];

char k;
do{
cout<<"********************************"<<'\n';
cout<<"\t欢迎进入班级信息管理系统\n";
cout<<"********************************"<<'\n';
cout<<"\t1:学生学籍创建"<<'\n';
cout<<"\t2.学生学籍查询"<<'\n';
cout<<"\t3:学生学籍修改"<<'\n';
cout<<"\t4:学生毕业查询"<<'\n';
cout<<"\t5.学生成绩单创建"<<'\n';
cout<<"\t6.学生成绩查询"<<'\n';
cout<<"\t7.学生成绩修改"<<'\n';
cout<<"\t8.学生缴费信息创建"<<'\n';
cout<<"\t9.学生缴费信息查询"<<'\n';
cout<<"\t10.学生缴费信息修改"<<'\n';
cout<<"\t11:学生课表创建(包括选课)"<<'\n';
cout<<"\t12:学生课表查询"<<'\n';
cout<<"\t13:学生课表修改"<<'\n';
// cout<<"\t14.学生奖学金\n";
cout<<"\t0:退出管理"<<'\n';
cout<<"********************************"<<'\n';
cout<<"请输入你要进行的管理"<<'\n';
cin>>k;
cout<<"\n\n";
switch(k)
{
case '1':Create_xueji();break;
default:cout<<"错误指令,请从新输入"<<"\n";break;
}
}while(k!=0);
}
展开
 我来答
uniqueCNL
2012-12-26 · TA获得超过711个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:237万
展开全部
读入信息的for()循环没判断啊
更多追问追答
追问
额……我仿照while(cin>>a){outfile<<a;}这种类型写的。当输入Ctrl-z时跳出循环
追答
#include
#include
#include
using namespace std;
class student
{
public:
char name[30]; //学生姓名
char intime[100]; //入学时间
char offtime[100]; //离校时间
char reason[100]; //离校原因
char number[10]; //学号
char grade[40]; //年级,
char Class; //班级
char fee; //学费金额
student()//构造函数及其初始化
{
name[0]='\0';//初始化,将就下吧
intime[0]='\0';
offtime[0]='\0';
reason[0]='\0';
number[0]=0;
grade[0]='\0';//40是超出界限了,你以为给他赋值个字符就能初始化整个串吗?
Class=0;
fee=0;
}
}; //这里类定义结束,分号不能少

void Create_xueji()
{
int i;
cout>stu[i].number>>stu[i].name>>stu[i].grade>>stu[i].Class>>
stu[i].intime>>stu[i].fee>>stu[i].offtime>>stu[i].reason;
xuejifile<<"学号"<<stu[i].number<<"\t";
xuejifile<<"姓名"<<stu[i].name<<"\t";
xuejifile<<"年级"<<stu[i].grade<<"\t";
xuejifile<<"班级"<<stu[i].Class<<"\t";
xuejifile<<"入学时间"<<stu[i].intime<<"\t";
xuejifile<<"学费金额"<<stu[i].fee<<"\t";
xuejifile<<"离校时间"<<stu[i].offtime<<"\t";
xuejifile<<"离校原因"<<stu[i].reason<<"\t\n";
}
xuejifile.close();
}

你student类定义在哪结束的?我这给你改了下可以运行了,你看看有什么问题吧,我没仔细看
武帝第一
2012-12-28 · 超过11用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:25万
展开全部
试试把for 改成下面这样,把输入的语句 放到for里
for(i=0;i != 100;++i) //这里的100是由于你前面总共有 100 stu 对象.
{
cin>>stu[i].number>>stu[i].name>>stu[i].grade>>stu[i].Class>>stu[i].intime>>stu[i].fee>>stu[i].offtime>>stu[i].reason;

xuejifile<<"学号"<<stu[i].number<<"\t";
xuejifile<<"姓名"<<stu[i].name<<"\t";
xuejifile<<"年级"<<stu[i].grade<<"\t";
xuejifile<<"班级"<<stu[i].Class<<"\t";
xuejifile<<"入学时间"<<stu[i].intime<<"\t";
xuejifile<<"学费金额"<<stu[i].fee<<"\t";
xuejifile<<"离校时间"<<stu[i].offtime<<"\t";
xuejifile<<"离校原因"<<stu[i].reason<<"\t\n";

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aifeiasdf
2012-12-26 · TA获得超过101个赞
知道答主
回答量:121
采纳率:0%
帮助的人:65.1万
展开全部
原因在于Create_xueji()函数中这个for循环的问题
for(i=0;cin>>stu[i].number>>stu[i].name>>stu[i].grade>>stu[i].Class>>stu[i].intime>>stu[i].fee>>stu[i].offtime>>stu[i].reason;i++)
for循环的第二段分句就是判断结束条件如for(i=0;i<10;i++)即是当i为10的时候就跳出循环,你的没有判断退出,明白?
追问
额……我仿照while(cin>>a){outfile<<a;}这种类型写的。当输入Ctrl-z时跳出循环。。。好像和什么EOF文件结束符有关……我是新手,不知道这样用行不行。
追答
额  输入输出流不怎么清楚  一般都不这样做的 while里面可以加判断来跳出while,你可以看看标准库里对cin>>返回值的定义是什么的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式