私はC++に慣れようとしていましたが、私にとっては最も簡単なプログラミングができません。複数行でC++文字列を印刷
私が取得することを期待していた何while(true) {
cout << "."
string in;
cin >> in;
cout << "!" << in
}
:
.1
!1
.1 2
!1 2
私が実際に得た:
.1
!1
.1 2
!1.2
私はC++に慣れようとしていましたが、私にとっては最も簡単なプログラミングができません。複数行でC++文字列を印刷
私が取得することを期待していた何while(true) {
cout << "."
string in;
cin >> in;
cout << "!" << in
}
:
.1
!1
.1 2
!1 2
私が実際に得た:
.1
!1
.1 2
!1.2
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] >
まさに私が何をしていたのか。ありがとうございました! –
あなたが全体のラインを読みたい場合は、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';
}
}
これは実際のコードではありませんが、あなたがループの外にある最初の2 'cout'文の意味はかなり明白です。それを行い、 'cout << ">" << cmd;を 'cout << ">" << cmd << '\ n'; 'に変更すると、完了です。 –
@VaibhavBajajパーフェクト。ありがとうございました。私はそれを後でもっと仕事に適応させようとします。 :) –