Título: Ayuda urgente #C en este ejercicio Publicado por: ayoub20600 en 18 Enero 2018, 21:06 pm Hola a todos,
Me han pedido hacer este ejercicio y llevo dos días estancado sin poder resolver-lo. He visto ejemplo y tal en la web pero es que no me salgo. Agradecería que alguien me ayudase. Os dejo el enunciado. Deberás crear un fichero.h (el nombre queda a tu elección). En este fichero, que deberá estar protegido para que se pueda incluir varias veces, deberás definir una constante, llamada MAX. Puede tomar el valor que quieras, con un mínimo de 512 y un máximo de 8192. En este punto .h declararás una función, cuyo nombre queda a tu elección. En la función main, pedirás al usuario que introduzca tres palabras. Esas tres palabras las pasarás como parámetros a la función que habrás declarado en el fichero .h. La función devolverá una cadena (creada con malloc dentro de la función), que contendrá las tres palabras, separadas por espacio en blanco. La función la implementarás en el fichero .c, después de la función main. En el fichero .c, no olvides incluir (con #include) el fichero .h, poniendo su nombre entre comillas (no entre "<", ">"). Título: Re: Ayuda urgente #C en este ejercicio Publicado por: MAFUS en 18 Enero 2018, 21:19 pm ¿Qué llevas hecho?
No te vamos a escribir todo desde cero, te resolveremos dudas puntuales o te lo explicaremos hasta que lo entiendas (a partir de lo que veamos en donde fallas). Título: Re: Ayuda urgente #C en este ejercicio Publicado por: ayoub20600 en 18 Enero 2018, 21:52 pm ¿Qué llevas hecho? Vale.No te vamos a escribir todo desde cero, te resolveremos dudas puntuales o te lo explicaremos hasta que lo entiendas (a partir de lo que veamos en donde fallas). Yo tengo una cabecera que se llama ayoub.h, luego tengo main.c y implementacion.c en la cabecera tengo este código: #ifndef _AYOUB_H #define _AYOUB_H // #include<stdio.h> #include <string.h> //#include <cstring.h> #define MAX 50 void uniones(char *a, char *b, char *c); #endif El fichero main.c tengo esto: #include<stdio.h> //#include <cstdlib> #include"ayoub.h" #include <string.h> int main(){ printf("Introduzca tres palabras"); char a [15]; //el MAX me da error char b [15]; char c [15]; printf("\nPalabra A"); gets(a); // solo lee 1 palabra printf("\nPalabra A"); gets(b); // solo lee 1 palabra printf("\nPalabra A"); gets(c); // solo lee 1 palabra printf("Nombre de palabra A ingresado es: "); puts(a); printf("Nombre de palabra B ingresado es: "); puts(b); printf("Nombre de palabra C ingresado es: "); puts(c); char cadena_union = uniones( a, b, c); puts(cadena_union); // system("PAUSE"); return 0; } Aquí se supone que debo rellenar las 3 cadena y devolver el resultado a la función de la cabecera. El el fichero de implementacion.h tengo esto: #include"ayoub.h" #include<stdio.h> #include<string.h> using namespace std; void uniones(){ int longitud1, longitud2, longitud3 = 0; int suma_longitudes = 0; longitud1= strlen(a); //copio cuantos el numero de caracteres a longitud1 longitud2= strlen(b); //copio cuantos el numero de caracteres a longitud2 longitud3= strlen(c); //copio cuantos el numero de caracteres a longitud3 printf("\nLa cadena A tiene %d caracteres", longitud1); //aqui simplemente visualizo cuantos son printf("\nLa cadena B tiene %d caracteres", longitud2); printf("\nLa cadena C tiene %d caracteres", longitud3); suma_longitudes=longitud1+longitud2+longitud3; //sumo las longitudes para asignar espacio para la string cadena char *cadena = (char *)malloc((suma_longitudes + 1) *sizeof(char));//asigno el espacio acorde con lo que he introducido en las 3 cadenas de palabras printf("\nCadena: "); //scanf("%s", cadena); strcpy(cadena, a);//esto no sé si esta bien, pero lo que intento hacer es copiar el contenido de las 3 en una cadena strcpy(cadena, b); strcpy(cadena, c); printf("\n El resultado es %s", cadena); } Aquí lo que intento hacer es reservar espacio en la memoria con malloc y copiar el contenido de las 3 cadenas (a,b,c) en una dejando espacio entre cada contenido. Saludos Título: Re: Ayuda urgente #C en este ejercicio Publicado por: MAFUS en 19 Enero 2018, 00:40 am Los includes sobran en el ayoub.h ya que no haces uso de ninguna función de ellas.
Implementación.c sobra, el ejercicio te pide el main y justo debajo, en el mismo archivo, la implementación de la función. La firma de la declaración y de la definición de la función deben coincidir. Deben devolver el mismo tipo de dato y los argumentos deben ser del mismo tipo. La función debe devolver una cadena, por lo que la declaración que hay en la cabecera debería ser char* y no void como tipo de dato devuelto por la función. Si quieres una constante definida en la cabecera usa la palabra clave const. En main deberás declararla como extern. strcpy còpia al principio de la cadena destino, lo que necesitas es concatenar cadenas y se hace con strcat. El enunciado dice que debes separar con espacios las palabras pero al adquirir espacio con malloc no tienes en cuenta los espacios. De igual forma tampoco los incluyes al formar la cadena. |