2

body 入力の 2 行目で cin.getline が機能し始めるのに、最初の行で中断するのはなぜですか?

プログラムの実行例:

Enter name: Will
Enter body: hello world
hello again <= It accepts this one



 char* name = new char[100];
 char* body = new char[500];

 std::cout << "Enter name: ";
 std::cin.clear();
 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 std::cin.getline(name, 100);

 std::cout << "Enter body: ";
 std::cin.clear();
 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 std::cin.getline(body, 500');
 std::cin >> body;
4

2 に答える 2

2

cin.ignore ステートメントで最初の行を無視しているためです。

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

それは行全体を無視します。

それを削除すると、必要なものが得られます。

出力がすぐに画面に表示されるように、cout ストリームをフラッシュすることもできます。cout.flush();getline の前に a を追加します。

于 2010-10-09T23:53:24.967 に答える
2

JoshD が言うように、さらに、ヘッダーからstd::stringとを使用することで、多くの作業と労力を節約できます。std::getline<string>

お気に入り ...

#include <string>
#include <iostream>
int main()
{
    using namespace std;
    std::string name;
    cout << "Enter name: ";  getline( cin, name );
}

乾杯 & hth.,

– アルフ

于 2010-10-09T23:58:44.180 に答える