从文件读取信息然后保存到对象数组中,就是读不出来,代码如下:
#include <iostream>
#include<stdlib.h>
#include <string>
#include <sstream>
#include<fstream>
#include<vector>
#define MAXSIZE 100
#define MINSIZE 50
#define RADIX 10
using namespace std;
int y = 0;
class Student{
public:
string name;
int num;
int chinese;
int math;
int english;
int add;
void print();
};
void Student::print()
{
cout<<name<<" "<<num<<" "<<chinese<<" "<<math<<" "<<english<<" "<<add<<endl;
}
int GetNumInPos(int num, int pos)
{
int temp = 1;
for (int i = 0; i < pos - 1; i++)
temp *= 10;
return (num / temp) % 10;
}
void lsd(vector<int> &A)
{
int len = A.size();
vector< vector<int> > radixArray(10); //分为0~9的序列空间
for (int pos = 1; pos <= RADIX; pos++) //从个位开始到最高位数
{
for (int i = 0; i < len; i++) //分配过程
{
int num = GetNumInPos(A[i], pos);
radixArray[num].push_back(A[i]);
}
for (int i = 0, j = 0; i < 10; i++) //收集
{
while (!radixArray[i].empty())
{
A[j++] = radixArray[i].front(); //取首部数据依次插入原数组
radixArray[i].erase(radixArray[i].begin()); //移除首部元素
}
}
}
}
vector<string> split(string a,string b)
{
vector<string> x;
a += b;
int length = a.length();
int pos = a.find(b);
while (pos != (-1)) {
string x = a.substr(0,pos);
a = a.substr(pos+1,length);
pos = a.find(b);
}
return x;
}
void menu()
{
cout<<" "<<"1.从文件读入数据"<<endl; //菜单
cout<<" "<<"2.LSD排序"<<endl;
cout<<" "<<"3.MSD排序"<<endl;
cout<<" "<<"4.结束程序"<<endl;
}
int main()
{
Student data[MAXSIZE],data1[MAXSIZE],data2[MAXSIZE],data3[MAXSIZE],data4[MAXSIZE],data5[MAXSIZE];
int x,i,j;
string str;
ifstream in;
ofstream out;
while(1)
{
menu();
cin>>x;
switch(x)
{
case 1:
in.open("old.txt",ios::in);
if(!in)
{
cout<<"文件打开失败"<<endl;
}
i=0;
while(in>>data[i].name
>>data[i].num
>>data[i].chinese
>>data[i].math
>>data[i].english
>>data[i].add)
{
y++;
i++;
}
cout<<y<<endl;;
break;
case 2:
cout<<"排序前顺序为:"<<endl;
cout<<"姓名 学号 语文 数学 英语 总分"<<endl;
for(i=0;i<y;i++)
{
data[i].print();
}
vector<int> v1,v2,v3,v4,v5;
for(i=0;i<y;i++)
{
v1.push_back(data[i].num);
v2.push_back(data[i].chinese);
v3.push_back(data[i].math);
v4.push_back(data[i].english);
v5.push_back(data[i].add);
}
lsd(v1);
lsd(v2);
lsd(v3);
lsd(v4);
lsd(v5);
for(i=0;i<y;i++)
{
for(j=0;j<y;j++)
{
if(data[j].num==v1[i])
{
data1[i]=data[j];
}
if(data[j].chinese==v2[i])
{
data2[i]=data[j];
}
if(data[j].math==v3[i])
{
data3[i]=data[j];
}
if(data[j].english==v4[i])
{
data4[i]=data[j];
}
if(data[j].add==v5[i])
{
data5[i]=data[j];
}
}
}
cout<<"LSD排序结果:"<<endl;
cout<<"按照学号排序:"<<endl;
for(i=0;i<y;i++)
data1[i].print();
cout<<"按照语文成绩排序:"<<endl;
for(i=0;i<y;i++)
data2[i].print();
cout<<"按照数学成绩排序:"<<endl;
for(i=0;i<y;i++)
data3[i].print();
cout<<"按照英语成绩排序:"<<endl;
for(i=0;i<y;i++)
data4[i].print();
cout<<"按照总成绩排序:"<<endl;
for(i=0;i<y;i++)
data5[i].print();
break;
}
}
return 0;
}
运行结果:
要读的文件:
你能否写一个最简单的程序,只读文件内容的, 然后看看这个程序是否能把刚读的内容打印出来? 例如,在下面的代码中加一些打印
while(in>>data[i].name
>>data[i].num
>>data[i].chinese
>>data[i].math
>>data[i].english
>>data[i].add)
{
y++;
i++;
//把 data[i] 的内容打印出来
}
#include <iostream>
#include <string>
#include<fstream>
using namespace std;
class Student{
public:
string name;
int num;
int chinese;
int math;
int english;
int add;
void print();
};
int y=0;
void Student::print()
{
cout<<name<<" "<<num<<" "<<chinese<<" "<<math<<" "<<english<<" "<<add<<endl;
}
int main()
{
Student data[10];
ifstream in;
in.open("1.txt",ios::in);
if(!in)
{
cout<<"文件打开失败"<<endl;
}
int i=0;
while(in>>data[i].name
>>data[i].num
>>data[i].chinese
>>data[i].math
>>data[i].english
>>data[i].add)
{
y++;
i++;
data[i].print();
//把 data[i] 的内容打印出来
}
}
还是不行啊
已经解决,谢谢了