pegar espaços com scanf();
a gets() é perigosa pelo fato de que ela não tem prevenção alguma pro caso de o usuário digitar mais caracteres que o tamanho da cadeia onde serão armazenados estes. Tipo, se tu tem um vetor de 20 caracteres e o usuário digitar 27, vai dar "Segmentation Fault"... Com o fgets() você pode se previnir desse problema.
tem tbm um formato bem estranho do scanf que pega os espaços junto:
scanf("%[^\n]s",cadeia);
isso significa que ela vai pegando os caracteres teh surgir um "\n"...
mas tem akele velho problema da toamanho da cadeia... A scanf() não eh uma função muito segura...
usa a fgets que é melhor.
feito.