0
#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

4 回答 4

6

使用cin.ignore()after从缓冲区cin >> kaput;中删除。\n

cin >> kaput;
cin.ignore();

从输入流中提取并丢弃字符,直到并包括 delim。

作为评论,你最好使用

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2013-04-26T09:39:49.687 回答
0

您可能需要在第一个输入的末尾插入一个cin.ignore()aftercin >> kaput来读取换行符。否则getline将此换行符视为第一个字符,使用它并结束阅读。

于 2013-04-26T09:40:56.160 回答
0

当你输入数字时,数字将被读入kaput变量,但'\n'字符仍会在缓冲区中,由getline) 读取。要解决此问题,您需要调用以从缓冲区cin.ignore()中删除换行符stdin

于 2013-04-26T09:42:58.597 回答
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();
    }
于 2020-08-02T07:00:06.140 回答