【问题标题】:Reading from a file, only reads text untill it gets to empty space从文件中读取,只读取文本直到它到达空白空间
【发布时间】:2011-12-08 08:16:17
【问题描述】:

我成功地读取了文件中的文本,但它只读取到它碰到一个空白区域,例如文本:“Hi, this is a test”,cout 为:“Hi”。

删除“,”没有任何区别。

我想我需要在以下代码中添加类似于“inFil.ignore(1000,'\n');”的内容:

inFil>>text;
inFil.ignore(1000,'\n');
cout<<"The file cointains the following: "<<text<<endl;

我不希望更改为getline(inFil, variabel);,因为这会迫使我重新编写一个基本上可以运行的程序。

感谢您的帮助,这似乎是一个很小且很容易解决的问题,但我似乎找不到解决方案。

【问题讨论】:

  • 如果它的行为需要改变,重构程序是好的。围绕阅读部分写一个测试,然后去readline。完成测试后,您就可以开始更改程序并对此感到放心。
  • "强制我重做一个基本上可以工作的程序。" 如果程序显示“嗨”,而您希望它显示“嗨,这是一个测试” ”,程序“基本工作”如何?
  • 我真的不明白为什么切换到 getline() 对你来说是一场暴行。它不会改变代码中的任何内容,只是它正是您正在寻找的小而简单的修复程序。比弄乱忽略()更优雅。嗯,你想得到一条线,那你为什么不使用 getline 呢?是的,“基本上工作”,太棒了。

标签: c++ file dev-c++


【解决方案1】:
std::ifstream file("file.txt");
if(!file) throw std::exception("Could not open file.txt for reading!");
std::string line;
//read until the first \n is found, essentially reading line by line unti file ends
while(std::getline(file, line))
{
  //do something line by line
  std::cout << "Line : " << line << "\n";
}

这将帮助您阅读文件。我不知道您要实现什么,因为您的代码不完整,但上面的代码通常用于读取 c++ 中的文件。

【讨论】:

  • 不需要将"" 分配给line,因为它默认构造为空,无论如何。改变它,你得到一个+1。对line 末尾不包含换行符的一点修改可能会有所帮助(尽管这可能已经在示例中看到)。
  • @ChristianRau 我猜的初始化习惯:)
  • 请不要循环播放std::endl。太浪费了。
【解决方案2】:

您一直在使用格式化提取来提取单个字符串,一次:这意味着一个单词。

如果你想要一个包含整个文件内容的字符串:

std::fstream fs("/path/to/file");
std::string all_of_the_file(
   (std::istreambuf_iterator<char>(filestream)),
   std::istreambuf_iterator<char>()
);

【讨论】:

  • +1 非常好的 C++ 解决方案。我想很少有人知道 streambuf 迭代器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 2019-08-16
  • 1970-01-01
  • 2015-01-30
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多