5

私はコンピューターラボにいますが、講師の誰も私のgetlineが正しく機能していない理由を理解できません。情報が正しく保存されていません(1文字または2文字しか保存されていません)。なぜそうなのか誰か知っていますか?

void addMovie(Inventory movie[], int &count)
{
    string s;
    int i;

    cout << "Please enter the SKU " << endl;
    cin >> i;
    movie[count].sku = i;

    cout << "Please enter the name of the movie you wish to add " << endl;

    cin.ignore('\n');
    getline(cin, s, '\n');
    movie[count].title = s;

    count++;
}
4

1 に答える 1

8

std::istream::ignore(つまりcin.ignore())の最初の引数は、破棄する文字数です。の値の'\n'ASCIIコードは10であるため、'\n'暗黙的に整数に変換されます(ほとんどの場合、10ですが、別のエンコードが使用されている場合は異なる可能性があります-EBCDICは21を使用します)。いくつか残っています。

実際に必要なのは、改行が見つかるまで可能な最大数を破棄することです。

#include <limits> //for numeric_limtis
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2012-09-19T00:36:13.443 に答える