Ваш код использует operator>>
для получения пользовательского ввода. Это функция ввода с форматированием слов. Он пропускает начальные пробелы, а затем извлекает последовательность непробельных символов. То есть извлекает следующее слово ввода. Получив следующее слово, вы обрабатываете его, начинаете новую строку вывода, запрашиваете у пользователя дополнительные данные, а затем повторяете. Когда в каждой строке больше слова, компьютер не ждет дополнительных вводов (несмотря на приглашение), и вы видите результат, который вы описываете.
Поскольку вы ищете строку ввода, вам следует использовать API, который получает всю строку ввода вместо одного слова. Готовы к удивительному названию этого API? Он называется getline()
, или, точнее, std::istream::getline
, поскольку вы застряли с использованием символьных массивов вместо строк.
std::cin.getline(msg, 100);
Использование std::string
не повлияет на результаты, но мне было бы легче найти документацию. версия operator>>
для строк также основана на словах. API получения строк для строк - это бесплатная функция, std::getline
.
Предлагаемый ввод для одного из ваших тестов:
Done
DONE
donegal is in Ireland
done?
done!
done