我无法显示矢量的内容。我不确定这是否是我从文本文件中读取值的方式,或者我的显示功能是否正常工作。
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
string line;
int n,length;
std::vector<int>arr1;
fstream file("t1.txt");
if(file.is_open())
{
while (getline(file,line))
{
cout << line << endl;
}
file << line;
length = line.length();
while(file >> n)
arr1.push_back(n);
for(int i =0; i < (int)arr1.size(); i++)
cout << arr1.at(i) << endl;
}
return 0;
}
非常感谢任何帮助。
文本文件包含&#34; 5 2 5 5 -1 7 2 5 3 5 2 -2&#34;
答案 0 :(得分:3)
我想你有一个矢量构建问题(从文件到矢量读取值)。您应该使用getline
删除(或评论)表达式,以及将行写回文件(file << line
),并仅使用file >> n
。
尝试以下缩短版程序
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
string line;
int n;
std::vector<int> arr1;
fstream file("t1.txt");
if(file.is_open())
{
while(file >> n)
arr1.push_back(n);
for(int i =0; i < (int)arr1.size(); i++)
cout << arr1.at(i) << endl;
file.close();
}
return 0;
}
初始代码的问题在于,从文件中读取行(仅包含一行)后,下次读取(无论是file >> ...
还是getline(...)
)将不提供数据,因为END OF FILE 。要再次从文件中读取数据,您应该重新打开它
...
length = line.length();
file.close();
file.open("t1.txt");
while(file >> n)
arr1.push_back(n);
...
或回到开头
...
length = line.length();
file.clear();
file.seekg(0, ios_base::beg);
while(file >> n)
arr1.push_back(n);
...
但是您应该理解,写入文件流并不能提供所需的效果 - 只有在将缓冲区中的写入数据传输到文件后(在一般情况下,文件关闭后),记录的数据才可用。
修改强>
另外我想补充一点,C ++允许向量输入和向量输出而无需额外的循环,只需考虑以下示例
if(file.is_open())
{
// filling vector from the stream
istream_iterator<int> it(file); // iterator for int values in file
istream_iterator<int> eos; // end of straem
arr1.insert(arr1.begin(), it, eos);
// output vector to the stream (cout = standard output stream)
ostream_iterator<int> oit (cout,"\n"); // "\n" = new line is a separator for output
// also " " or any other separator can be used
copy(arr1.begin(), arr1.end(), oit);
}