Позвольте мне предположить, что ваш вклад выглядит так:
> ./myProg
Please, enter your name: noob$
lease, enter your favourite movie: Top Gun
noob's favourite movie is
>
Здесь мы видим, что вы ввели: noob$<return>
с последующим Top Gun<return>
.
Проблема в том, что компьютер видит следующее:
noob$\nTop Gun\n
OK. Итак, что происходит в коде.
std::cin.getline (name,256,'$'); // This reads upto the '$' and throws it away.
Итак, ваш поток ввода теперь выглядит так:
\nTop Gun\n
Обратите внимание на '\ n' в начале потока.
Теперь ваша следующая строка:
std::cin.getline (title,256); // This reads the next line.
// But the next line ends at the next new line
// which is the next character on the input stream.
// So title will be empty.
Чтобы исправить это, вам нужно прочитать эту пустую строку.
Лучший способ исправить это - не требовать, чтобы имя заканчивалось на '$'
. Пользовательский ввод, как правило, лучше сделать строкой за раз. Когда пользователь нажимает return
, буфер очищается, и поток фактически начинает работать. Программа ничего не делает (кроме ожидания) до тех пор, пока этот буфер не будет сброшен в поток (это обычно по возвращении, но может произойти, если вы просто наберете много).