当我告诉它时,为什么第二类名称没有填满?

时间:2013-05-08 23:23:20

标签: c++

当我调用函数来填充第二个类时,它只是以某种方式传递它。调用函数(fill())不是有错误的,因为我在遇到这个问题后写了这个错误。代码发布在下面:

class Name_pairs {
public:
    void read_names();
    void read_ages();
    void sort();
    vector<string> names() const { return name; }
    vector<double> ages() const { return age; }
private:
    vector<string> name;
    vector<double> age;
};

void Name_pairs::read_names() {
    string s;
    while(cin>>s) {
        if(s == "|")
            break;
        name.push_back(s);
    }
}

void Name_pairs::read_ages() {
    double d;
      while(cin>>d) {
        if(d < 0)
            break;
        age.push_back(d);
    }
}


void Name_pairs::sort() {
    vector<string> dup_name = name;
    vector<double> dup_age = age;
    std::sort(name.begin(), name.end());
    double buffer;

    for(int i = 0; i < name.size(); i++) {

        for(int ii = 0; ii < dup_name.size(); ii++) { 

            if(name[i] == dup_name[ii]) {

                buffer = age[i];
                age[i] = dup_age[ii];
                break;
            }
        }
    }
    return;
}

void fill(Name_pairs& np)
{
    np.read_names();
    np.read_ages();
    np.sort();
}

int main() try
{
    Name_pairs test;
    Name_pairs test1;

    fill(test);

    fill(test1);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

看起来您的Name_pairs::read_ages()方法会从cin读取,直到关闭该流。第一次调用fill时,它将一直显示,直到关闭流。当您为第二个fill实例致电Name_pairs时,cin已经关闭,因此无法读取任何内容,请将您的媒介留空test1

答案 1 :(得分:0)

解决问题的另一种方法是致电

if(!cin) cin.clear()

将istream状态设置为good。