C++ 无法在getline之后打印向量字符串
我有一个.csv文件,其中包含以下内容:C++ 无法在getline之后打印向量字符串,c++,ifstream,c++20,cout,getline,C++,Ifstream,C++20,Cout,Getline,我有一个.csv文件,其中包含以下内容: 1.0,2.0 2.0,3.0 现在我想读取此文件并将其打印到终端。 我希望输出如下所示: 1.0|2.0| 2.0|3.0| 但我得到的只是: | | 当我运行调试器时,向量包含正确的数据,但它不会打印它 cout时的向量数组(调试器): array={std::vector} [0]={std::vector} [0]={std::basic_string}“1.0” [1] ={std::basic_string}“2.0\r” [1] ={
1.0,2.0
2.0,3.0
现在我想读取此文件并将其打印到终端。
我希望输出如下所示:
1.0|2.0|
2.0|3.0|
但我得到的只是:
|
|
当我运行调试器时,向量包含正确的数据,但它不会打印它
cout时的向量数组(调试器):
array={std::vector}
[0]={std::vector}
[0]={std::basic_string}“1.0”
[1] ={std::basic_string}“2.0\r”
[1] ={std::vector}
[0]={std::basic_string}“2.0”
[1] ={std::basic_string}“3.0\r”
我的代码:
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
int main()
{
using namespace std;
ifstream in("C:\\Users\\freit\\CLionProjects\\Aufgabe2\\data.csv", ios_base::in);
string line, field;
vector< vector<string> > array; // the 2D array
vector<string> v; // array of values for one line only
while ( getline(in,line) ) // get next line in file
{
v.clear();
stringstream ss(line);
while (getline(ss,field,',')) // break line into comma delimited fields
{
v.push_back(field); // add each field to the 1D array
}
array.push_back(v); // add the 1D array to the 2D array
}
// print out what was read in
for (size_t i=0; i<array.size(); ++i)
{
for (size_t j=0; j<array[i].size(); ++j)
{
cout.flush();
cout << array[i][j] << "|"; // (separate fields by |)
}
cout << "\n";
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
使用名称空间std;
ifstream-in(“C:\\Users\\freit\\CLionProjects\\Aufgabe2\\data.csv”,ios\u base::in);
字符串行、字段;
vectorarray;//二维数组
向量v;//仅一行的值数组
while(getline(in,line))//获取文件中的下一行
{
v、 清除();
弦流ss(线);
while(getline(ss,字段“,”)//将行拆分为逗号分隔的字段
{
v、 向后推(字段);//将每个字段添加到1D数组中
}
array.push_back(v);//将一维数组添加到二维数组
}
//把读到的内容打印出来
对于(size_t i=0;i而言,问题出在我想要读取的data.cls
中。
调试器在每行末尾显示一个\r
()。
这可能是在用Excel打开data.cls
并勾选自动保存后出现的。
在编写新的数据后,问题得到解决。cls
使用标准windows texteditor。通过注释获得了解决方案!在此处打印预期输出:(除了额外的尾随|
)问题是:即使数组[i][j]的内容
没有打印,你应该看到|
而不仅仅是每行|
。你确定你正在编译你认为你正在编译的代码吗?我确定。这就是为什么我如此困惑的原因…使用clion\r
是一个回车符。可能是你在Windows中编写了文件,但在Linux中阅读了它,或者相反,请看这里:我将编写当答案解决了你的问题时,你应该接受它:)只在2天内可用。他真的吗?我不知道这个限制。无论如何,很乐意帮忙。
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
int main()
{
using namespace std;
ifstream in("C:\\Users\\freit\\CLionProjects\\Aufgabe2\\data.csv", ios_base::in);
string line, field;
vector< vector<string> > array; // the 2D array
vector<string> v; // array of values for one line only
while ( getline(in,line) ) // get next line in file
{
v.clear();
stringstream ss(line);
while (getline(ss,field,',')) // break line into comma delimited fields
{
v.push_back(field); // add each field to the 1D array
}
array.push_back(v); // add the 1D array to the 2D array
}
// print out what was read in
for (size_t i=0; i<array.size(); ++i)
{
for (size_t j=0; j<array[i].size(); ++j)
{
cout.flush();
cout << array[i][j] << "|"; // (separate fields by |)
}
cout << "\n";
}
return 0;
}