【问题标题】:getline won't read string from a variable. (C++)getline 不会从变量中读取字符串。 (C++)
【发布时间】:2012-02-13 07:58:02
【问题描述】:

我正在尝试使变量存储一个书面问题,然后将其写入文件,但是,getline 没有读取该字符串,当我尝试将其写入文件时,它什么也不写。

#include <iostream>
#include <fstream>
#include <string> 

using namespace std;

void addquestiontofile(){
    ofstream myfile;
    // Open file to be written to.
    myfile.open("quesitons.txt",ios::ate | ios::app);

    string newquestion;
    cout << "insert new question:  \n";
    getline(cin, newquestion); // This is the problem line

    if(myfile.is_open())
    {
        myfile << newquestion;
    }
}

【问题讨论】:

  • 调用这个函数的代码是什么样的?它没有碰巧包含这样的内容:cin &gt;&gt; something; 是吗?
  • 在此之前您还阅读过cin 的其他内容吗?您的缓冲区中可能有前一个输入行的结尾,尤其是当您使用&gt;&gt; 读取某些内容时。
  • 在 VS2010 上编译并执行良好 (int main() { addquestiontofile(); return 0; }.
  • 您的示例编译并运行(在添加主函数后)对我来说很好,无论我输入什么,它都会被写入文件。你确定它什么都不写吗?也许您只是在文件中看错了,请尝试使用 hexeditor,或者尝试在输出后添加一些尾行。
  • myfile.is_open() 是否返回 true?如果打开失败,您将不知道,因为没有打印任何失败消息来报告这一点。

标签: c++ string file-io getline


【解决方案1】:

前一个输入中可能有一个尾随换行符。试试这个:

while (newquestion.empty())
{
    getline(cin, newquestion);
    boost::trim(newquestion);
}

【讨论】:

    【解决方案2】:

    从 cmets 看来,您似乎已经使用 cin &gt;&gt; variable 从前一行输入中读取。这会将前一行的结尾留在输入流的缓冲区中,因此下一次调用 getline() 将产生一个空字符串。

    您可以使用

    清除该行的其余部分
    cin.ignore(numeric_limits<streamsize>::max(), '\n')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2016-06-28
      • 2020-09-04
      相关资源
      最近更新 更多