使用<fstream> </fstream>从文件流式传输

时间:2012-01-09 12:47:17

标签: c++ fstream

如何在不丢失空格的情况下从文件中读取字符? 我有一个文件,其中包含以下内容:
快速的棕色狐狸跳过懒狗。
当我从文件(一个字符一次)读取时,我丢失了空格,但正确读取了所有其他字符。为什么?
这是代码的一个例子:

unsigned int cap = (unsigned)strlen("The quick brown fox jumps over the lazy dog.");
char c[cap];
int i = 0;
while (!fIn.eof()) {
    fIn >> c[i];
    ++i;
}

for (int i = 0; i < cap; i++)
    cout << c[i];

当我打印数组时,所有空格都丢失了。你能告诉我怎样才能避免这个问题吗?

3 个答案:

答案 0 :(得分:4)

您可以使用<iomanip>中声明的流操作符。

std::noskipws是你想要的,它指示流提取操作符不要跳过空格。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <algorithm>

int main()
{
    std::ifstream ifs("x.txt");

    ifs >> std::noskipws;

    std::copy(std::istream_iterator<char>(ifs),
              std::istream_iterator<char>(),
              std::ostream_iterator<char>(std::cout));
}

另一种选择是使用原始输入函数fstream::get()fstream::read()

答案 1 :(得分:2)

使用方法“get”:

ifstream in("try.in");
char c;
while((c = in.get()) && in) {
  cout << c;
}

答案 2 :(得分:1)

默认情况下,istream会设置skipws(跳过空白)标志。这会在阅读时跳过前导空格。

您可以使用&lt; iomanip&gt;

中的std :: noskipws将其关闭
fIn << std::noskipws;
while (!fIn.eof()) {
    // etc.
}