C++ getline赢得';t从变量中读取字符串。(C+;+;)
我试图将一个变量存储为一个书面问题,然后将其写入一个文件。然而,getline没有读取字符串,当我试图将其写入文件时,它只是不写入任何内容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.
#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,或者尝试在输出后添加一些尾行。Doesmyfile.is_open()
返回true
?如果打开失败,您将不知道,因为没有打印失败消息来报告此情况。在调用此函数时,代码看起来是什么样子的?它没有包含这样的内容:cin>>某物;
是吗?在此之前,您是否阅读了cin
中的其他内容?您可能会看到在其缓冲区中设置上一个输入行的结尾,特别是当您使用>
读取某些内容时。在VS2010上编译并执行良好(int main(){addquestiontofile();return 0;}
。您的示例编译并运行(在添加主函数后)对我来说很好,无论我输入什么,它都会写入文件。你确定它不会写入任何内容吗?也许你只是看错了文件,尝试使用hexeditor,或者尝试在输出后添加一些尾行。Doesmyfile.is_open()
returntrue
?如果打开失败,您将不知道,因为没有打印失败消息来报告此情况。