Я в компьютерной лаборатории, и никто из преподавателей не может понять, почему мой 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++;
}
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');
Других решений пока нет …