矢量没有按预期行事

时间:2018-01-10 20:28:49

标签: c++ vector

我正在尝试打开文本文件并将文本文件的行传递给矢量。每行中的第一个数字是向量的大小,因为我不知道文本文件的结束点,所以我使用while循环来查找结尾。我的想法是我可以获取一个文本文件并在其上运行合并排序。所以,例如:

3 5 4 9
5 0 2 6 8 1

将其分类:

4 5 9
0 1 2 6 8 

我遇到的问题是,当我对一个大于前一个向量的向量进行排序时(如示例中所示),我没有得到输出。这看起来很简单。我很确定问题出在下面的代码中。谢谢你的任何指示。

while (!file.eof())
{
    int size;
    file >> size;
    vector<int> myVector(size); 

    int n = 0; 
    while (n < size && file >> myVector[n])
    {
        ++n;
    }

    sort(myVector);

    for (int j = 0; j < size; ++j)
    {
        if (file.eof()) break; 

        cout << myVector[j] << ' ';
    }

    cout << '\n'; 
}

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

if (file.eof()) break; 

一旦您阅读了文件的最后一行,file.eof()就会成立。因此,第一次通过循环应该打印排序的矢量,你打破循环,不打印任何东西。它与向量是否大于前一个向量无关,它只是文件最后一行的问题。修复是摆脱那条不必要的线。

您还需要更改主循环。 while (!file.eof())是循环文件内容的错误方法(有关完整说明,请参阅链接的问题)。使用:

int size;
while (file >> size) {
    ...
}

答案 1 :(得分:1)

因为这行:

if(file.eof()) break;

如果你得到你的程序eof,因为你在第一次迭代时打破了打印循环,所以不会打印任何东西 例如 - 如果在你的例子中8之后没有字符 - 你不会得到输出,但即使是一个空格也可以改变它

除此之外 - 您的排序功能是否有机会清除矢量?或改变它?