0

さて、私はcin'd文字列を組み合わせるための単純なC++関数を書いていました。私は現在Linuxに取り組んでいるので、単純な「getline(cin、input)」コマンドの贅沢はありません。これまでのコードは次のとおりです。

string getLine()          
{
    string dummy;          
    string retvalue;          
    do
    {
        cin << dummy;
        retvalue += dummy;
    } while           
    return retvalue;          
}

私が知りたいのはこれです:プロンプトは実際にユーザーに入力を求めていますか、それともスペースのために残ったバッファーからまだ読み取っていますか?

4

4 に答える 4

8

のためにgetline定義されていstringsます:

std::string line;
std::getline(std::cin, line);
于 2009-09-29T01:11:00.190 に答える
6

私は現在Linuxに取り組んでいるので、単純な「getline(cin、input)」コマンドの贅沢はありません。

Linuxはそれと何の関係がありますか?getlineスペルが異なることを除いて、標準のC++ですcin.getline(input, size[, delimiter])

編集:これは便利なリファレンスなので削除しないでください。ただし、AraKの投稿は、がstd::getline必要な人に適しているはずですstd::string。は代わりに動作しistreamます。getlinechar *

于 2009-09-29T01:09:34.490 に答える
0

はい。プロンプトは実際にはユーザーに入力を求めていますが、行ではなく単語を期待しています。それがおそらくあなたに敏感な空間に見えた理由です。

複数の行を読みたいと仮定して、あなたが望むのはこれです。

#include <iostream>
...
std::string sLine;
while(getline(std::cin, sLine)) {
    // process sLine;
}

コードには他にもいくつか問題がありました。

  • cin<<ダミー//これには>>演算子が必要です
  • 変数はおそらく「ダミー」ではなく「単語」と呼ばれるべきです
  • retvalue+=ダミー; //単語の間にスペースを追加する必要があります
  • } while // whileテストは、行末のテストである必要があります

質問のループはワードリーダーに近いです。これはその目的のためになります。

#include <string>
#include <iostream>
#include <list>
...
void getStandardInput(std::list<std::string> & stringList) {

    std::string word;
    while (true) {
         cin >> word;
         if (cin.eof())
              return;
         stringList.push_back(word);
    }
}
于 2017-02-22T18:26:27.323 に答える
0

getline()<string>ヘッダーにあります

私はいつもそれを忘れています。

于 2017-07-07T02:31:50.753 に答える