2016-12-05 8 views
2

私はユーザーからの入力を受け付けるプログラムを書いています。私は言葉の間にスペースを入れるために入力が必要です。私はそれを行う解決策を見つけるのが難しいです。 質問する前に、同じ質問でstackoverflowで他にも複数の質問を試みました。これらは私が試したもののいくつかです。 How to cin Space in c++?C++入力文字列のスペース

std::cin input with spaces?

Demonstration of noskipws in C++

Effect of noskipws on cin>>

私のコードの問題は、すぐに私のsetBusinessNameメソッドが呼び出されるように、それだけで自分自身を完了することです。私は自分のデータを入力するのを待たずに出力してから自分自身を返します。ヘルプ必須...

string setBusinessName() 
{ 
    string name = ""; 
    cout << "The name you desire for your business:"; 
    getline(cin, name, '\n'); 
    cout << name; 
    return name; 
} 
+5

あなたは '>>'と 'getline'を混ぜることができるような音です。 '>>'はストリーム中の解析されていない空白を残し、しばしばgetlineが終わるための終わりのラインマーカーを残します。しかし、これがあなたが走っていることを確かめるために[mcve]を見る必要があります。 – user4581301

+1

この編集を試してください:[link](http://cpp.sh/45q6s) –

答えて

4

私は十分なポイントを持っていない、まだコメントすることはできませんが、getline(cin, name, '\n');cin.ignore();を追加してみたのですか?このよう

string setBusinessName() 
{ 
    string name = ""; 
    cout << "The name you desire for your business:"; 
    cin.ignore(); 
    getline(cin, name, '\n'); 
    cout << name; 
    return name; 
} 
+0

これはOPの問題を解決すると確信していますが、これは一般的なケースでは悪い考えです。バッファに空白文字がない場合は、有効な入力だけを食べました。 EOLが必要であることが分かっているところで '' ''の後ろに 'ignore'を入れて、' 'ignore()' 'を' cin.ignore(numeric_limits :: max()、 '\ n'); EOLに加えてスペースやその他のものがぶら下がっていないことを確認してください。 – user4581301

-1

それが正常に動作しています。私はちょうどこれを試みた。

ちょうどあなたが行うコメントにいくつかのより詳細な説明を、追加
#include <iostream> 
#include <string> 
using namespace std; 

string setBusinessName(){ 
    string name = ""; 
    cout << "The name you desire for your business:"; 
    getline(cin, name); 
    cout << name; 
    return name; 
} 

int main() { 
    setBusinessName(); 
    system("PAUSE"); 
} 
+0

システム(「PAUSE」)は何をしていますか? –

+0

出力コンソールを一時停止します。プログラムによって結果が返されるたびに、ウィンドウを閉じるまで出力コンソールが一時停止します。 – Chip

1

cout << "Enter value:"; 
cin >> x; 

ユーザーがを入力押すので、入力バッファは、ユーザーが挿入された値を持つ場合、CIN命令が実行されます余分な文字は'\n'です。 cinの処理を続行しても、getline(文字列に空白を入れるのと同じように)を使用する場合は、getlineがバッファ内の最初の発生時に停止することに注意する必要があります。 getlineは空になります。これを避けるために

、そしてあなたが本当にCINとgetlineの両方を使用する必要がある場合、あなたはcin.ignore(streamsize n = 1, int delim = EOF)を使って、バッファからその'\n'を削除する必要があり、この機能はdelimと一致する最初の文字までのバッファまたはからstreamsize文字を消去します

cin << x; 
cin.ignore(256, '\n'); 
getline(cin, name, '\n'); 

使用することをお勧めします::(を含む)、ここでは一例です

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

バッファにある文字の数を推測したくない場合は、

+0

参考 - 'std :: cin.ignore()' - http://www.cplusplus.com/forum/beginner/9148/ – parasrish

-1

すでにストリーム内に何かがあり、getline()がそれを読み込んでいる可能性があります。

この機能を使用する前にcin>>を使用していないことを確認してください。 getline()より前にcin.ignore()を使用すると、ストリームに何かが存在しないようにすることができます。

関連する問題