C++ 我能';t打印二维向量

C++ 我能';t打印二维向量,c++,C++,所以我一直在尝试使用forloop打印2D数组 但是如果我打印出来看到结果 (每个数字代表每一行) 1 12 123 1234 12345 123456 1234567 12345678 123456789 它不是逐行打印,而是打印第一行,打印时添加额外的行 我以为是串流问题 所以我试过了 clear; empty; s.str(""); stringstream().swap(s); 但这些都不起作用 while(getline(file1,line1)) {

所以我一直在尝试使用forloop打印2D数组

但是如果我打印出来看到结果 (每个数字代表每一行)

1
12
123
1234
12345
123456
1234567
12345678
123456789

它不是逐行打印,而是打印第一行,打印时添加额外的行

我以为是串流问题 所以我试过了

clear; empty; s.str(""); stringstream().swap(s);
但这些都不起作用

    while(getline(file1,line1))
    {
        stringstream s(line1);
        while(getline(s,word,','))
        {
            student.push_back(word);

        }
            stack.push_back(student);
            s.str("");
    }
    file1.close();
for (int i = 0; i < stack.size(); i++)
{
    for (int j = 0; j < stack[i].size(); j++)
    {
        cout << stack[i][j];

    }
    cout << endl;
}
while(getline(file1,line1))
{
钢绞线(1号线);
while(getline(s,word,,'))
{
学生。推回(单词);
}
堆叠。推回(学生);
s、 str(“”);
}
file1.close();
对于(int i=0;icout免责声明:此答案基于猜测,因为您没有提供太多相关信息。我假设如下:

  • 学生是一个
    std::vector
  • 堆栈是一个
    std::vector
  • 那么您的问题是,您没有清除
    student
    。只需在内部循环之前添加对
    student.clear()
    的调用,您就可以了


    更详细的解释:在内部循环中,您将一个新字符串推送到
    student
    ,然后推送(从而复制)
    student
    进入
    stack
    。在下一次迭代中,您将另一个值推入
    student
    。它现在包含两个值,您将一个带有两个值的向量推入
    stack
    。依此类推。

    看看您的问题并没有传达问题输出的所有相关属性。您必须找到一个方法使它变得更清晰。考虑改变你的程序以制作更短的输出线,这将有助于使不想要的输出的累加方面更清楚。这里来看看格式化提示,你需要达到的是A。我做了一些改进外观,但你需要工作的清晰度。在输出中描述不需要的模式。在进行MRE时。@Yunnosch是的,但在步骤1中调用了
    str.erase()
    ,在读取之前清除字符串。