Это потому, что когда вы используете оператор извлечения со строкой в правой части, он останавливается на первом символе пробела.
То, что вы хотите, это getline
бесплатная функция:
std::getline(std::cin, streetnum); // reads until \n
Вы можете указать другой разделитель, если хотите:
char c = /* something */;
std::getline(std::cin, streetnum, c); // reads until c is encountered
Еще лучше сделать небольшую функцию для использования:
void prompt(const std::string& pMsg, std::string& pResult)
{
std::cout >> pMsg >> ": ";
std::getline(std::cin, pResult);
}
prompt("Street Number", streetnum);
prompt("Street Name", streetname);
// etc.
:)