我正在尝试打开文本文件并将文本文件的行传递给矢量。每行中的第一个数字是向量的大小,因为我不知道文本文件的结束点,所以我使用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';
}
答案 0 :(得分:1)
问题在于这一行:
if (file.eof()) break;
一旦您阅读了文件的最后一行,file.eof()
就会成立。因此,第一次通过循环应该打印排序的矢量,你打破循环,不打印任何东西。它与向量是否大于前一个向量无关,它只是文件最后一行的问题。修复是摆脱那条不必要的线。
您还需要更改主循环。 while (!file.eof())
是循环文件内容的错误方法(有关完整说明,请参阅链接的问题)。使用:
int size;
while (file >> size) {
...
}
答案 1 :(得分:1)
因为这行:
if(file.eof()) break;
如果你得到你的程序eof,因为你在第一次迭代时打破了打印循环,所以不会打印任何东西 例如 - 如果在你的例子中8之后没有字符 - 你不会得到输出,但即使是一个空格也可以改变它
除此之外 - 您的排序功能是否有机会清除矢量?或改变它?