如何逐行读取字符串

时间:2013-07-12 04:55:47

标签: c++

我想成为一名申请学生经理。我想用户只需输入姓名和年龄的输入信息,然后应用程序将其保存在文件中。我可以为我的应用程序保存它,但如何阅读它?这是我的代码,它可以读取文件中的所有信息学生但是除了第一个学生。我不知道为什么?

#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();
}

1 个答案:

答案 0 :(得分:0)

您的input()功能正常。问题是你正在调用readfile()函数 - 这是没有意义的,因为你已经加载了一次输入数据。您的readfile()未致电ignore(),导致其覆盖您之前拥有的正确数据。