No era necesario quitar el do...while, el problema con tu código corregido es que cuando la cadena está vacía, lee un nuevo caracter. Seguramente se esté "comiendo" el primer caracter de la línea siguiente a una línea vacía debido a eso.
Código C++:
Ver originalbool continuar = true;
do {
cin.getline (texto, 1000);
if ( (strlen(texto
) == 1) && (texto
[0] == '.') ) { continuar = false;
} else {
// guardar línea
}
} while (continuar);
Otra cosa: no es necesario considerar el caso de una línea vacía, la forma en la que estás escribiendo (cout << texto <<endl) asegura que habrá un salto de línea, y como texto está vacía, ese salto de línea será lo único que se escriba.
Saludos.