Use o cin.getline() pra isso.
(Para não deixar as informações tão razas, se não der pra entender eu respondo melhor depois, boa sorte)
char name[50];
cin.getline(name, 50); //Argumentos usados name = variavel que vai receber a entrada, 50 = Quantidade maxima de caracteres que serão armazenadas por este método
http://www.cplusplus.com/reference/istream/istream/getline/
--------------------------------------------------------------------------------------------------------------------
Tambem gostaria de comentar sobre a declaração do int i na primeira parte do codigo, se ele for uma variavel usada no loop o melhor é declarar ela dentro do loop pra ela ser desalocada assim que o loop sair de escopo.