Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getline赢得';t从变量中读取字符串。(C+;+;)_C++_String_File Io_Getline - Fatal编程技术网

C++ getline赢得';t从变量中读取字符串。(C+;+;)

C++ getline赢得';t从变量中读取字符串。(C+;+;),c++,string,file-io,getline,C++,String,File Io,Getline,我试图将一个变量存储为一个书面问题,然后将其写入一个文件。然而,getline没有读取字符串,当我试图将其写入文件时,它只是不写入任何内容 #include <iostream> #include <fstream> #include <string> using namespace std; void addquestiontofile(){ ofstream myfile; // Open file to be written to.

我试图将一个变量存储为一个书面问题,然后将其写入一个文件。然而,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;
    }
}
#包括
#包括
#包括
使用名称空间std;
void addquestiontofile(){
流文件;
//打开要写入的文件。
打开(“quesitons.txt”,ios::ate | ios::app);
字符串新问题;

cout从注释中可以看出,您似乎使用了
cin>>变量
来读取前一行输入。这将在输入流的缓冲区中保留前一行的结尾,因此下次调用
getline()
将生成空字符串

您可以使用清除该行的其余部分

cin.ignore(numeric_limits<streamsize>::max(), '\n')
忽略(数值限制::max(),“\n”)
从注释中可以看出,您似乎使用了
cin>>变量
来读取前一行输入。这将在输入流的缓冲区中保留前一行的结尾,因此下一次调用
getline()
将生成一个空字符串

您可以使用清除该行的其余部分

cin.ignore(numeric_limits<streamsize>::max(), '\n')
忽略(数值限制::max(),“\n”)
可能有前一个输入的尾随换行符。请尝试以下操作:

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

可能有来自上一个输入的尾随换行符。请尝试以下操作:

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

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