2

getline()をcin(getline(cin、line))で動作させることはできますが、ストリームを開くと、ファイルから行が読み取られません。このファイルには、周期表の元素のリストが含まれています。

例 :
HHeO など
..

編集:

ただし、新しく読み取った行をcoutしようとすると、次の行のvarシンボルに入れられません
。cout<< "symbol:" << symbol << endl;

それは私に何も与えませんが、最初の要素(H)を返すはずです。

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

using namespace std;

void print(vector <string> x)
{
    cout << "list of elements:" << endl;
    for (int i = 0; i < x.size(); ++i)
    {
        cout << x[i] << endl;
    }
}

int main(int argc, char** argv) 
{
    string symbol;
    vector <string> elementlist;
    ifstream readin;

    readin.open("Elements.txt");
    getline(readin,symbol);
    cout << "symbol: " << symbol << endl;
    while (!readin.good())
    {
        elementlist.push_back(symbol);
        getline(readin,symbol);
    }
    print (elementlist);
    return 0;
}
4

2 に答える 2

2

私はそれを次のようにします:

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

class line {
    std::string data;
public:
    friend std::istream &operator>>(std::istream &is, line &l) {
        std::getline(is, l.data);
        return is;
    }
    operator std::string() const { return data; }    
};

int main() {
    std::ifstream readin("Elements.txt");

    // Initialize vector from data in stream:
    //
    std::vector<std::string> 
        element_list((std::istream_iterator<line>(readin)),
                      std::istream_iterator<line>());

    // write data from vector to cout:
    //
    std::copy(element_list.begin(), element_list.end(),
             std::ostream_iterator<std::string>(std::cout, "\n"));

    return 0;
}                              
于 2012-08-30T04:31:49.017 に答える
1

コメントで述べたように、ループ条件が間違っています。

while (!readin.good())
{
    elementlist.push_back(symbol);
    getline(readin,symbol);
}

結局のところ、条件を使用してループする必要readin.good()があります。!readin.good()に評価されるため、false実際にループに入ることがありません。

于 2012-08-30T04:08:14.633 に答える