【问题标题】:While reading a file (ifstream), is there any way to direct it to make a new line?在读取文件(ifstream)时,有什么方法可以引导它换行吗?
【发布时间】:2010-09-27 15:19:21
【问题描述】:

在读取文件(ifstream)时,有什么方法可以引导它换行吗?

例如,我希望这种情况发生:

我的文件>>数组[1]>>数组[2]>>endl;

显然,“endl”是不允许的。有没有其他方法可以做到这一点?

编辑---感谢大家的快速回复!

从一个文本文件中,我尝试将该文件中的两个字符串存储到数组中,然后对下一行执行相同的操作(或者直到我需要,使用 for 循环)

使用字符串对我来说很重要,因为它将使我未来的程序更加灵活。

【问题讨论】:

  • 既然不可能做到这一点,显然它不是你想要的。描述您正在寻找的效果,而不是语法。
  • 好的,抱歉。从一个文本文件中,我试图将该文件中的两个字符串存储到数组中,然后对下一行执行相同的操作(或者直到我需要,使用 for 循环)。我希望我的表现可以理解。

标签: c++ arrays input newline ifstream


【解决方案1】:

几个选项:

你可以使用忽略。

myfile >> array[1] >> array[2];
myfile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

或者你可以将每一行读入字符串流

std::string line;
std::getline(myfile,line);
std::stringstream  stream(line);

stream >> array[1] >> array[2];

请注意:数组索引从 0 开始。

【讨论】:

    【解决方案2】:

    使用std::getline 将一行读入内存流,然后从中获取两个字符串。

    while (cin)
    {
      string line;
      getline(cin, line);
    
      stringstream stream;
      stream << line;
    
      stream >> array[1]>>array[2];
    }
    

    【讨论】:

      【解决方案3】:

      阅读您的两个项目,然后致电myfile.ignore(8192, '\n')

      【讨论】:

      • 非常感谢Zan,这正是我想要的。 8192到底是从哪里来的?
      • @Vinny:2 x 4096;如果首先没有找到换行符,则可能是要读取的最大字符数。但是给出提示 - 有一个标准功能 - 你也可以做 RTFM,不是吗?
      • 我猜它只是“大到可以放一条线”。
      • 8192 是 2 * 4096,4096 是 x86 上的内存页(也是 4 KB)。
      • @dribeas:做出这样的假设有一天会神秘地破坏你的代码。
      【解决方案4】:

      我不知道这个问题是什么意思。这是将文件的所有行读入字符串向量的简单方法。如果您先执行此操作,可能会更容易做您想做的事情。

      std::vector<std::string> lines;
      
      std::string line;
      while (std::getline(myFile, line))
          lines.push_back(line);
      

      现在您可以说lines[4] 来获取第五行,或者说lines.size() 来找出有多少行。

      【讨论】:

        【解决方案5】:

        这应该可行:

        stringstream stream;
        string sLine;
        int iLine;
        
        while (cin)
        {
          getline(cin, sLine);
        
          stream << sLine;
          stream >> data[iLine][0] >> data[iLine][1];
        }
        

        早期答案的定制版本。

        【讨论】:

        • 不幸的是,这不起作用。您不断将每一行附加到流中,而无需将其重新设置为空。您应该在循环内本地声明流,它将起作用。
        猜你喜欢
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        相关资源
        最近更新 更多