#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ofstream wysla;
wysla.open("wysla.txt", ios::app);
int kaput;
string s1,s2;
cout<<"Please select from the List below"<<endl;
cout<<"1.New entry"<<endl;
cout<<"2.View Previous Entries"<<endl;
cout<<"3.Delete an entry"<<endl;
cin>>kaput;
switch (kaput)
{
case 1:
cout<<"Dear diary,"<<endl;
getline(cin,s1);
wysla<<s1;
wysla.close();
break;
}
return 0;
}
在这段代码中,我试图保存一串字符但是不可能,例如,当我使用getline时,当我使用cin时,只保存第一个单词时,没有任何内容保存在文本文件中。我想保存整个条目我该怎么办?
答案 0 :(得分:6)
在cin >> kaput;
之后使用cin.ignore()
从缓冲区中删除\n
。
cin >> kaput;
cin.ignore();
从输入流中提取并丢弃字符,直到和 包括delim。
作为评论,您最好使用
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 1 :(得分:0)
您可能需要在cin.ignore()
之后插入cin >> kaput
以在第一个输入结束时读取换行符。否则getline
会将此换行符视为第一个字符,使用它并结束阅读。
答案 2 :(得分:0)
当您输入数字时,数字将被读入kaput
变量,但'\n'
字符仍将在缓冲区中,getline
将读取该字符。要解决此问题,您需要致电cin.ignore()
以从stdin
缓冲区中删除换行符
答案 3 :(得分:0)
这可以工作:
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main() {
string firstname;
ofstream name;
name.open("name");
cout<<"Name? "<<endl;
cin>>firstname;
name<<firstname;
name.close();
}