Почему 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++;
}

5

Решение

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');
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]