我可以使用getline()来处理cin(getline(cin,line)),但是当我打开一个流时,它不会从文件中读取该行。该文件包含元素周期表中的元素列表。
例如:
^ h
他
Ø
等...
编辑:
但是,当我尝试cout新读取的行时,它不会将其放入行中的var符号中:
cout<< “符号:”<<符号<< 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;
}
答案 0 :(得分:1)
正如我在my comment中所述,你的循环条件是错误的。
while (!readin.good()) { elementlist.push_back(symbol); getline(readin,symbol); }
事实证明,希望使用条件readin.good()
进行循环。由于!readin.good()
将评估为false
,因此您实际上从未进入循环。
答案 1 :(得分: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;
}