[ Foro de C ]

Una tarea

24-Feb-2021 02:10
Invitado (Anonimo)
1 Respuestas

Programa que solicite tu nombre, día y mes de nacimiento, posteriormente deberá unirlos todos, en una sola cadena, separando el nombre de la fecha por una coma y el día del mes por una diagonal, ejemplo: “Pedro, nació el 31/12
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

int main()
{

char cadena[150],nombre[50],dia[2],mes[2];

printf("¿como te llamas?\n");
gets(nombre);


printf("¿que dia naciste?\n");
gets(dia);


printf("¿en que mes naciste?\n");
gets(mes);


sprintf(cadena," %s, nacio el %s/%s \n",nombre,dia,mes);
puts(cadena);

system("pause");

}

Cuando lo pongo en fucion no me aparece el nombre me sale esto:
, nacio el 18/8


24-Feb-2021 20:20
Invitado (sena)

hola anónimo

ahí hay varias cosas
• por ej gets esta totalmente en desuso ya que no tiene control de límites y se podría escribir en el espacio de otras variables, en cambio fgets si tiene control de límites
• debes tener en cuenta que fgets también copia todo hasta el '\0' con lo que el enter estará presente el la cadena y tendrías que quitarlo explícitamente
• una opción sencilla seria scanf("%[^\n]s", nombre); con lo que guardas hasta encontrar el enter, aunque scanf tampoco tiene control de límites y no es muy recomendable :-(

por otro lado no usas la facilidad que te da sprintf con los formatos, pudiendo hacer dia y mes de tipo entero y el %d en sprintf,  el ya lo convierte a carácter

te diría también que hacer una llamada al sistema con system no suele ser buena idea sobre todo pudiendo evitarla con un simple getchar();

podría que dar algo así: https://www.onlinegdb.com/Hk4WU74GO

suerte ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)