#include
#include
#include
using namespace std;
struct Studentrank
{
string name;
string number;
int grade;
int rank;
};
void input(Studentrank ran[]);
void ra(Studentrank ran[]);
void find(Studentrank ran[],string key,int min,int max);
void output(Studentrank ran[]);
void main()
{
Studentrank ran[7];
input(ran);
ra(ran);
output(ran);
find(ran, "0905001",0,6);
output(ran);
}
void input(Studentrank ran[])
{
ifstream in("G:\C++作业\1.txt");
for (int i=0;i in >> ran[i].number >> ran[i].name >> ran[i].grade;
}
void ra(Studentrank ran[])
{
Studentrank temp;
for (int pass = 1; pass {
for (int i = 0; i if (ran[i].grade {
temp = ran[i];
ran[i] = ran[i+1];
ran[i+1]=temp;
}
}
for (int i = 0; i ran[i].rank = i + 1;
}
void find(Studentrank ran[],string key,int min,int max)
{
Studentrank temp;
for (int pass = 1; pass {
for (int i = 0; i if (atoi(ran[i].number.c_str()) {
temp = ran[i];
ran[i] = ran[i + 1];
ran[i + 1] = temp;
}
}
min=0;
max=7-1;
int mid;
do
{
mid=(min+max)/2;
if(ran[mid].number==key)
{
cout break;
}
else if(atoi(ran[mid].number.c_str()) {
min=mid+1;
}
else if(atoi(ran[mid].number.c_str())>atoi(key.c_str()))
{
max=mid;
}
if(min==max)
{cout<<"未找到\n";
break;
}
}while(1);
}
void output(Studentrank ran[])
{
ofstream out("G:\C++作业\2.txt");
out << "学号" << "姓名" << "成绩" << "排名" << endl;
for (int i =0; i<7; i++)
out << ran[i].number << ran[i].name<< ran[i].grade << ran[i].rank << endl;
}
为什么输出的总是“未找到”
是折半查找那里错了吗?
你的文件中有几组数据, 你的循环条件是左闭右开, 还是左闭右闭, 这个很重要, 不然会有一些数据判断不到
你不觉得你这样把程序拷贝过来会有一些语法错误吗。。贴图比较好。