为什么getline如此不一致?

Dav*_*zar 5 c++ string getline

我在计算机实验室,没有一个导师可以弄清楚为什么我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++;
}
Run Code Online (Sandbox Code Playgroud)

chr*_*ris 8

std::istream::ignore(即cin.ignore())第一个参数是要丢弃的字符数.其值为'\n'10,因此'\n'被隐式转换为整数(最可能是10,但如果使用不同的编码则可能会有所不同 - EBCDIC使用21),这就是忽略了多少个字符,留下剩下几个.

您真正想要的是在找到换行符之前丢弃最大可能的数字:

#include <limits> //for numeric_limtis
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)