ifstream get()没有填充char数组

时间:2012-05-21 05:21:55

标签: c++ iostream

我不知道该怎么做

#include "fstream"
#include "iostream"

using namespace std;

#define out(a) cout << #a << ": " << a << '\n'

void print(string s)
{
  cout << s << '\n';
}

 int main()
{
  ifstream readt1;
  readt1.open("test1.yaml");

  while(readt1.good())
  {
    char cc[128];
    readt1.get(cc,128);
    out(cc);
  }
readt1.close();
}

该代码...输出:

cc: version: 0.14.1
cc: 

test.yaml就是这个

version: 0.14.1
name: scrumbleship
author: dirkson
description: >
  A minecraft like game that allows you
  to build your own spaceship!

我已经尝试了很多方法来实现这一点,而它根本就没有

3 个答案:

答案 0 :(得分:2)

如果你在get()之后添加readt1.ignore();,它应该可以工作:

  while(readt1.good())
  {
    char cc[128];
    readt1.get(cc,128);
    readt1.ignore(); // <--- add this to ignore newline
    out(cc);
  }

这解决了直接问题,但使用std::getlinestd::string会更好的C ++。类似的东西:

while(std::getline(readt1, line)) {// Do stuff}

答案 1 :(得分:1)

您应该使用getline()来读取ifstream

答案 2 :(得分:0)

另外,我会在循环之外得到第一行,并且循环应检查EOF以确保获得整个文件。不好()只是暗示有一个文件要读?