如何在不丢失空格的情况下从文件中读取字符?
我有一个文件,其中包含以下内容:
快速的棕色狐狸跳过懒狗。
当我从文件(一个字符一次)读取时,我丢失了空格,但正确读取了所有其他字符。为什么?
这是代码的一个例子:
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];
当我打印数组时,所有空格都丢失了。你能告诉我怎样才能避免这个问题吗?
答案 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.
}