Bueno mi profesor ha dicho ke es mejor hacerlo con:
scanf("%s", cad);
Y yo creo ke es mejor con:
gets(cad);
El argumenta ke es mejor porke puedes poner scanf("%20s", cad); por ejemplo para limitarlo a 20 caracteres y ke si el usuario te mete 30 no te casque el programa pero yo sugiero ke es mejor el gets(cad); porke no tienes el problema del buffer de teclado (solucionable con fflush(stdin)) y porke scanf no te lee mas allá del espacio.
A ver si me sacais de dudas sobre ke es mejor porke...
PD: Me comenta ke no puedes hacer ke te lea una frase por teclado limitando el numero de caracteres en C, supongo ke no hay nada ke tenga lo mejor de las 2 funciones no? xD.