2017-06-27 6 views
1

私はC++に慣れようとしていましたが、私にとっては最も簡単なプログラミングができません。複数行でC++文字列を印刷

私が取得することを期待していた何
while(true) { 
    cout << "." 
    string in; 
    cin >> in; 

    cout << "!" << in 
} 

.1 
!1 
.1 2 
!1 2 

私が実際に得た:

.1 
!1 
.1 2 
!1.2 
+0

これは実際のコードではありませんが、あなたがループの外にある最初の2 'cout'文の意味はかなり明白です。それを行い、 'cout << ">" << cmd;を 'cout << ">" << cmd << '\ n'; 'に変更すると、完了です。 –

+0

@VaibhavBajajパーフェクト。ありがとうございました。私はそれを後でもっと仕事に適応させようとします。 :) –

答えて

1

CINは、あなたが期待するすべての方法で動作しないことがあり、標準入力から読み取りストリームです。抽出演算子>>は、空白に達するまでcinから読み取ります。したがって、cin >> cmdは、コマンド内の最初の単語と等しいcmdを設定します。残りの言葉は、CINに残っているので、それが再びループし

> test 

プログラムを印刷した後、入力を促し、およびCINの代わりにあなたがストリームに何か他のものを追加することを可能にするからtest2を読み込みます。

行全体を読みたい場合は、getlineを使用してください。

#include <string> 
using std::string; 
#include <iostream> 
using std::cin; using std::cout; using std::getline; 

int main() { 
    while (true) { 
    cout << "\n\n"; 
    cout << "[CMD] > "; 
    string cmd; 
    // Store the next line, rather than the next word, in cmd 
    getline(cin, cmd); 

    cout << "> " << cmd; 
    } 
} 

あなたが期待するように、これが実行されます。

[CMD] > test 
> test 

[CMD] > test test2 
> test test2 

[CMD] > 
+1

まさに私が何をしていたのか。ありがとうございました! –

1

あなたが全体のラインを読みたい場合は、std::cinに直接入力をフォーマットしすることではありません行く道。代わりにstd::getlineを使用してください。大体このような

#include <string> 
#include <iostream> 

int main() { 
    while(true) { 
    std::cout << "." 
    std::string in; 
    getline(std::cin, in); 

    std::cout << "!" << in << '\n'; 
    } 
}