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(ie 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 回答