Al introducir los datos en este programa y en su dicha impresión, el resultado no seria del tipo:
xx yy
si no que por algún motivo después de la impresión de la primera cadena es como si hubiera un salto de linea, quedando tal que así:
xx
yy
No se como remediarlo ni que lo causa

...
fgets:
Esta función lee como máximo uno menos que el número de caracteres indicado por n desde el stream apuntado por stream al array apuntado por cadena.
Ningún carácter adicional es leído después del carácter de nueva línea (el cual es retenido) o después de un final de fichero (EOF). Un carácter nulo es escrito inmediatamente después del último carácter leído en el array.
gets:
Esta función lee caracteres desde el stream apuntado por stream stdin, en el array apuntado por cadena, hasta que se encuentre un final de fichero (EOF) o un carácter de línea nueva es leído.
Cualquier carácter de línea nueva es descartado, y un carácter nulo es escrito inmediatamente después del último carácter leído en el array.
Fuente:
http://www.conclase.net¿Como getchar() que en principio imprime en pantalla, es capaz de borrar del buffer? ¿es debido a que en este caso imprime NADA, y por lo tanto lo limpia?
getchar no imprime en pantalla, coge un carácter del buffer de entrada. Al coger un carácter, coge el último en el código anterior, limpiando el buffer.
Yo lo haría de otra manera:
#define MAXLONG 60
#define PROT_OVERFLOW -1
#include <stdio.h>
int main()
{
char nombre[MAXLONG];
char apellidos[MAXLONG];
int c, i = 0;
printf( "Cu\xA0l es su nombre?\n" );
while((c = getchar()) != '\n')
{
if(i >= MAXLONG) return PROT_OVERFLOW;
nombre[i] = c;
i++;
}
nombre[i] = '\0';
printf( "\nCu\xA0les son sus apellidos?\n" );
i = 0;
while((c = getchar()) != '\n')
{
if(i >= MAXLONG) return PROT_OVERFLOW;
apellidos[i] = c;
i++;
}
apellidos[i] = '\0';
printf( "\nSu nombre completo es: %s %s", nombre, apellidos );
return 0;
}
Para limpiar el buffer también puedes usar fflush(stdin);
Salu2
fflush:
Si stream apunta a un stream de salida o de actualización cuya operación más reciente no era de entrada, la función fflush envía cualquier dato aún sin escribir al entorno local o a ser escrito en el fichero; si no, entonces el comportamiento no está definido. Si stream es un puntero nulo, la función fflush realiza el despeje para todos los streams cuyo comportamiento está descrito anteriormente.
(la misma fuente anterior)
Un saludo de ghastlyX
