如何读取文件并将每四行保存在结构的变量中

时间:2016-05-09 19:40:29

标签: c++

我仍然非常喜欢c ++,编码和一般,所以请耐心等待。

最近,在我的计算机科学课上,我被要求制作一个充当电话簿的程序,能够保存不同联系人的信息,例如姓名,地址,电话号码和电子邮件。

电话簿的组织方式如下:

名称

地址

电话号码

电子邮件

姓名2

地址2

电话号码2

电子邮件2

因此,您可以预测哪条线包含哪些信息,并将其保存在结构的矢量中。我的代码是这样的:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

struct Contact {
string name;
string address;
string phone;
string email;
};

string line;

vector<Contact> contacts;

int main(){

    ifstream phonebook;

    phonebook.open("phonebook.txt");


    if (phonebook.is_open()){

        int counter = 0;
        int contactCounter = 0;

            while( getline(phonebook,line) ){

                //cout << "line is " << line;
                if(line.length()<=0){
                    cout << "In the if";
                }else{
                    if(counter % 4 == 0){
                        contacts[contactCounter].name = line;
                        cout << counter;
                    }else if(counter % 4 == 1){
                        contacts[contactCounter].address = line;
                    }else if(counter % 4 == 2){
                        contacts[contactCounter].phone = line;
                    }else if(counter % 4 == 3){
                        contacts[contactCounter].email = line;
                        contactCounter++;
                    }

                }
                counter++;
            }
        } else cout << "an error has occurred in opening the contact list";

    cout << "Address of contacts[0]: " << contacts[0].address; //a test to see if it worked

    return 0;

    }

(我还有一个预先制作的文本文件来测试它) 但是每次我运行程序时它都会停止然后退出。任何信息?很抱歉,我无法很好地解释我的思维过程。

1 个答案:

答案 0 :(得分:2)

您的矢量在此处为空:vector<Contact> contacts;。您需要push_back(或emplace_back,如果您不在遗留C ++上,并且允许更改您的类定义以包含用户定义的构造函数)每个新元素。