如何逐行读取字符串[重复]

Posted

技术标签:

【中文标题】如何逐行读取字符串[重复]【英文标题】:How to read string line by line [duplicate] 【发布时间】:2013-07-12 04:55:46 【问题描述】:

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

#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 skipping”,因为这也是一个问题。 @chris:为什么是矢量?对不起,我是 C++ 新手,我不明白 老实说,在您用来学习的任何书籍或资源中,都应该在指针作为动态数组之前教授它。关于如何使用 std::vector 以及为什么它让生活变得如此美好的例子很多。 @chris:我不在学校学习,我只是在家学习 一个好的book 将是一个非常有用的资产。 【参考方案1】:

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

【讨论】:

好的,非常感谢;)

以上是关于如何逐行读取字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何逐行读取 HTML [重复]

C++中怎么逐行读取数据

C++文件读写操作逐字符读取文本和逐行读取文本

如何逐行读取批处理文件中多余字符的文本文件?允许限制行长。(Windows,批处理脚本)

逐行读取TXT文件-Python [重复]

如何将字符串转换为 uint32_t [重复]