0
我想創建一個應用程序的學生經理。我想要用戶輸入一個名字和年齡的學生的信息,然後應用程序將它保存在一個文件中。我可以爲我的應用程序保存它,但如何閱讀它?這是我的代碼,它可以讀取文件中的所有信息,但第一個學生除外。我不知道爲什麼?如何逐行讀取字符串
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
struct St
{
string name;
int age;
};
class StManager
{
int n;
St *st;
public:
StManager()
{
n = 0;
st = NULL;
}
void input();
void output();
void readfile();
void writefile();
};
void StManager::input()
{
cout << "How many students you want to input?: ";
cin >> n;
st = new St[n];
for(int i=0; i<n; i++) {
cout << "Input student #"<<i<<":"<<endl;
cout << "Input name: ";
cin.ignore();
getline(cin, st[i].name);
cout << "Input age: "; cin>>st[i].age;
cout <<endl;
}
}
void StManager::writefile()
{
ofstream f;
f.open("data", ios::out|ios::binary);
f<<n;
f<<endl;
for(int i=0; i<n; i++)
f<<st[i].name<<setw(5)<<st[i].age<<endl;
f.close();
}
void StManager::readfile()
{
ifstream f;
f.open("data", ios::in|ios::binary);
f >> n;
for(int i=0; i<n; i++) {
getline(f, st[i].name);
f>>st[i].age;
}
f.close();
}
void StManager::output()
{
for(int i=0; i<n; i++) {
cout << endl << "student #"<<i<<endl;
cout << "Name: " << st[i].name;
cout << "\nAge: " << st[i].age;
}
}
int main()
{
StManager st;
st.input();
st.writefile();
cout << "\nLoad file..."<<endl;
st.readfile();
st.output();
}
請使用'std :: vector'而不是'new []'。你至少有內存泄漏。並查閱「C++ getline跳過」,因爲這也是一個問題。 – chris
@chris:爲什麼是矢量?對不起,我是C++的新手,我不明白 –
說實話,應該在指針之前將它教給你用來學習的任何書籍或資源中的動態數組。有很多關於如何使用'std :: vector'的例子,以及它爲什麼讓生活變得更好。 – chris