0

私はC++が得意ではないことを指摘したいと思います。通常はCを使用しますが、C++の基本を理解するのが良いと思ったので、データをサーバーに送信する必要があり、通常の std::cin >> 変数はできませんスペースへの入力のみを読み取るため、getline について読んでうまく機能していますが、無限ループで何かを行うと、次のようになります。

for (;;)
{
std::cout << "Hello" << std::endl;;
std::getline(std::cin,darek.wiadomosc);
}

最初の反復中に画面に表示される二重の Hello like: Hello Hello 入力されている文字列

しかし、1回のループの後、すべてが良好であることを示しています。getline に問題があると確信しています。なぜなら、それを std::cin >> に変更すると、テストのためだけに機能したからです。私の簡単な質問に答えてくれる人はいますか?

4

1 に答える 1

3

std::cinストリームにターミネータを残します (スペースまたは改行)。したがって、次のようにします。

std::string foo, bar;
std::cin >> foo;
std::getline(std::cin, bar);

次のように入力します。

Hello
World

bargetline「Hello」の後の最初の改行で停止するため、「World」ではなく空の文字列になります。

これを質問に戻すにstd::cin >>は、ループの開始前にインスタンスがある場合、改行が迷子になり、最初の反復が予期しない方法で動作する可能性があります。std::cin.ignoreストリームに残っている改行を無視するために使用できます。

于 2011-03-14T21:11:46.723 に答える