2009-06-15 5 views
0

cinに入力中にスペースを入力すると、最初の文字列が最初の値として使用され、後ろのものが次の値として使用されます。C++ cinを変更する

それでは、私たちはこのコードを持っているとしましょう:

cout << "Enter your Name"; 
cin >> name; 

cout << "Enter your age"; 
cin >> age; 

それでは、ユーザが「ジョン・ビル」と入力しましょう。

ジョンと彼の年齢はビルになると彼の名前がかかります。

する方法があります:

  1. は、行が自動的に_「「に」」からそれを変更することがありますか?

  2. その行をその行として読み込み、スペースを '通常の文字として読み込むようにしますか?

    このように使用することができますあなたは(cin.getlineを使用したい

答えて

4

はC++でラインを読むために:

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    cout << "Enter some stuff: " ; 
    string line; 
    getline(cin, line); 
    cout << "You entered: " << line << endl; 
} 
+0

文字列ヘッダーファイル/ライブラリを呼び出す必要はありません。より良いchar配列を使用する方が良いでしょう。 – Sev

+10

間違っている - このコメントボックスに収まるよりも多くの点で。 –

+2

いいえ誰もしていないので、役に立たないコメント。私が間違っていることを世界に伝えたいなら、なぜ私が間違っているのかを指摘してください。 – Sev

2

):

cin.getline(name, 9999, '\n'); 

と改行または9999文字まであらゆるものが含まれます。これは、Cスタイルのchar配列に対してのみ有効です。

getline(cin, name, '\n'); 

はstd :: stringsで動作します。

スペースをアンダースコアに置き換える場合は、手動で行う必要があります。あなたは「CINを>>」行うと

void replace_space(std::string &theString) 
{ 
    std::size_t found = theString.find(" "); 
    while(found != string::npos) 
    { 
     theString[found] = '_'; 
     found = theString.find(" ", found+1); 
    } 
} 
+1

またはstd :: replace(theString.begin()、theString.end()、 ''、 '_'); –

0

、デフォルトで設定されたIOS :: skipwsフラグでcin.getを呼び出している:あなたはSTDを使用している::あなたは、このような関数を作ることができる文字列を想定すると、 cin.getを明示的に呼び出して空白を含むようにします。

cin.get(name, strlen(name)) 

出典:http://minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm

+1

あなたが参照しているページは、プログラマーを習得する上で危険です。そして、それはあなたが提供するコードを主張していません。 –

+0

私はこのページを見てきました。それは私によく説明されているようです。他の人が一見正確なページで危険を理解できるように、あなたはより明確になりますか? – Kai

0

が、私はそれがより安全であるとのstd ::文字列を使用してお勧めします。 malloc経由でchar * + allocateメモリを使用すると危険です。割り当てを確認する必要があります。しかし、このリンクをチェックして、他のものが有益な場合の詳細を確認してください。https://stackoverflow.com/a/6117751/1669631