首页 文章

C ;使用字符串getline()不使用文件输入

提问于
浏览
1

我可以使用getline()来处理cin(getline(cin,line)),但是当我打开一个流时,它不会从文件中读取该行 . 该文件包含元素周期表中的元素列表 .

例如:
H

Ø
等等...

编辑:

但是,当我尝试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;
}

2 回答

  • 1

    我会做这样的事情:

    #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;
    }
    
  • 1

    正如我在my comment中所述,你的循环条件是错误的 .

    while(!readin.good())
    {
    elementlist.push_back(符号);
    函数getline(看书,符号);
    }

    事实证明,您希望使用条件 readin.good() 进行循环 . 由于 !readin.good() 将评估为 false ,因此您实际上从未进入循环 .

相关问题