Рассмотрим std::istream::getline(char *, std::streamsize)
.
Но убедитесь, что вы передали ему действительный указатель на выделенную память! То есть используйте это так:
char buffer[80];
std::cin.getline(buffer, sizeof buffer);
и не как это:
char *p;
std::cin.getline(p, 80); // Undefined behavior: using uninitialized variable
<ч />
EDIT . У вас есть этот код:
char* aTitle;
...
cout << "Enter title: ";
cin >> aTitle;
Это ошибка. Вы создаете указатель с именем aTitle
и не инициализируете его. Этот указатель теперь указывает на память, которой вы не владеете.
Оператор >>
записывает данные в местоположение, указанное указателем. Поскольку ваш указатель не указывает на то, что вы контролируете, >>
будет вызывать неопределенное поведение при записи через ваш указатель.
Урок: убедитесь, что вы указали допустимые значения для всех ваших указателей. (Более широкий урок: никогда не используйте указатели. (Хорошо, почти никогда .))
Сразу после этого у вас есть этот код:
cout << "Enter author: ";
cin.getline(aAuthor, 20);
Но рассмотрим состояние ввода. Ваш пользователь только что набрал «Челюсти», а затем ENTER . Ваш cin>>aTitle
прочитал «Челюсти» и оставил «\ n» во входном потоке.
Этот вызов istream::getline
читает до первой новой строки, которая является новой строкой, следующей за "Челюстями" (!), А не новой строкой, следующей за "Питером Бенчли"! Итак, теперь у вас есть «Челюсти» в aTitle (при условии, что вы исправили предыдущую ошибку), ничто в aAuthor и «Питер Бенчли \ n» все еще во входном потоке.
Урок: не смешивайте форматированный ввод с getline
. Используйте одно или другое последовательно в вашей программе.