如何在C ++中保存输入字符串?

时间:2013-04-26 09:35:33

标签: c++

#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时,只保存第一个单词时,没有任何内容保存在文本文件中。我想保存整个条目我该怎么办?

4 个答案:

答案 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();
    }