C++成绩查询

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:00:28
大家帮我看下这段程序,查询实现不了(2个记录时候就查得到第一个记录),因为发不了那么多代码就把这段发上来!
void locate()//查询
{
//student s1;
ifstream inf ;
inf.open("D:\\grade.dat",ios::in|ios::binary);
inf.read((char *)&s1[i],sizeof(s1[i]));
if(!inf)
{
cout<<"打开文件失败!"<<endl;
}
cout<<"请输入学号查询!"<<endl;
cin>>n;
for(i=0;i<100;i++)
{
if(strcmp(s1[i].GetNum(),n)==0)
{
s1[i].output();
}
else
cout<<"没有查询到此学号"<<endl;
break;
}
inf.close();
output是定义为输出的一个函数,

for(i=0;i<100;i++)
{
if(strcmp(s1[i].GetNum(),n)==0)
{
s1[i].output();
}
else
cout<<"没有查询到此学号"<<endl;
break;
}
假如输入的学号与s1[0]的学号不一样,就会执行break语句跳出循环,从而不会在与后面的s1[i]进行比较。cout应放在for循环体外。
可以写成这样:
for(i=0;i<100;i++)
{
if(strcmp(s1[i].GetNum(),n)==0)
{
s1[i].output();
break; /*学号不会重复,所以查询到一个就可以跳出循环了*/
}
}
if(i==100)
cout<<"没有查询到此学号"<<endl;

晕,仔细看看for里面的东西

if(strcmp(s1[i].GetNum(),n)==0)
{
s1[i].output();
}
else
cout<<"没有查询到此学号"<<endl;
break;

break在第一次循环的时候就跳出了