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

kaput数値を入力すると、数値は変数に読み込まれますが、'\n'文字はバッファ内に残り、 によって読み取られますgetline)。この問題を解決するには、呼び出してバッファcin.ignore()から改行文字を削除する必要がありますstdin

于 2013-04-26T09:42:58.597 に答える
0

最初の入力の最後にある改行文字を読み取るために、 cin.ignore()afterを挿入する必要がある場合があります。cin >> kaputそれ以外の場合getline、この改行を最初の文字と見なし、それを消費して読み取りを終了します。

于 2013-04-26T09:40:56.160 に答える