-1

免责声明:这个问题与教科书中的编程练习直接相关。

我正在从教科书中进行 C++ 编程练习,但无法弄清楚如何让它工作。希望有人能指出我的代码中的错误。问题来了……

“使用 istream_iterator、复制算法和 back_inserter 来读取包含用空格分隔的 int 值的文本文件的内容。将 int 值放入 int 向量中。复制算法的第一个参数应该是 istream_iterator 对象与文本文件的 ifstream 对象关联。第二个参数应该是使用类模板 istream_iterator 的默认构造函数初始化的 istream_iterator 对象 - 生成的对象可以用作“结束”迭代器。读取文件内容后,显示结果向量。”

我构建了以下代码。代码编译,但不做任何事情。

int main()
{
    std::vector< int > testVector;

    std::ifstream inputFile( "/Users/GrinNare/Documents/Study/C++/Chapter 16/Chapter 16/16_10_Text_File.txt", std::ios::in );

    std::istream_iterator< int > inputFromFile( inputFile );

    std::copy( inputFromFile, std::istream_iterator< int >(), back_inserter( testVector ) );

    for ( int i = 0; i < testVector.size(); i++ )
        std::cout << testVector[i] << "\t";

    std::cout << std::endl;

    return 0;
}

文本文件包含以下内容:“12 23 43 34”

我尝试调试代码并注意到文本文件中的值未正确读入 int 向量,因为它们由空格分隔,而不是新行。

有人可以帮忙吗?!

4

1 回答 1

0

我在 ideone 中尝试了您的代码,更改为从std::cin. 它按预期工作。

我可以重现您的问题的唯一方法是当我使用一个无法作为输入打开的文件时。

所以我想添加以下内容将显示发生了什么:

// after opening the file
if (! inputFile) {
  std::cerr << "Failed to open file" << std::endl;
  return 1;
}

可能您在该路径中有错字。

于 2015-07-11T10:49:59.697 回答