Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#511
Cita de: palacio29 en 15 Junio 2019, 04:21 AM
Disculpa por las variables, son horribles, ya lo se.
Y si quisiera asignar espacio en memoria para que funcione el strcpy que tendria que hacer?.
Porque la solucion que encontre es   (nuevo+k)->nombre=arreglo.nombre)
Con esa solución que dices que has encontrado lo que haces es que el puntero <nombre> apunte a la misma cadena constante que apunta <arreglo>. Con esto ahorras reservas de memoria pero no estás "haciendo copias" del nombre, lo que estás haciendo es que los punteros apunten al mismo sitio.

Si lo quieres hacer con memoria dinámica tendrías que reservar memoria y cambiar las líneas 20-22 (que están haciendo que el puntero apunte al nombre) por <strncpy()> para copiar literalmente el contenido del <string> en el nuevo array dinámico que has creado.
#512
En ningún momento estás reservando memoria para <nombre> de ninguna instancia de la struct <s_alumno>. Lo único que haces en el <main> es hacer que el puntero a <nombre> apunte a una cadena literal que se encuentra en otra zona de memoria. Por lo tanto no puedes usar <strcpy()> ya que estás intentando copiar datos en una zona no permitida de memoria.

PD: Se agradecen nombres de variables más significativos que ayuden a seguir el programa con facilidad.
#513
Cita de: palacio29 en 14 Junio 2019, 22:38 PM
Y si tengo que ordenar un arreglo dinamico y no se la longitud de ese arreglo dinamico...Hasta que punto tengo que recorrerlo?.
Si creas un arreglo dinámico en algún sitio estás calculando el tamaño que debe tener... guarda esa longitud. En tu caso que vas incrementando en 1 el tamaño con <realloc()>, al final puedes saber también cuál es esa longitud. Mantenla de alguna forma (retorno o referencia). Para ello te recomendaría que la función reciba el nuevo array por referencia y devuelva la longitud de este como valor de retorno:

int CARGA(t_alumno arreglo1[], t_alumno arreglo2[], t_alumno *nuevo_arreglo[]);

El tamaño de la primera dimensión de un array no es necesario pasarlo a la función. También puedes hacerlo al revés:

t_alumno* CARGA(t_alumno arreglo1[], t_alumno arreglo2[], int *longitud_final);
#514
No he mirado el resto del programa pero te puedo adelantar que la línea 108 no es correcta. Un array no acaba cuando el siguiente elemento apunta a NULL, básicamente porque no apunta a NULL. Cuando pasas un array debes pasar su longitud en otro parámetro para saber hasta donde recorrerlo.
#515
Recorre por palabras y usa algún criterio para reconocer la palabra que quieres. Pongamos que quieres recoger el número del final de cada línea, puedes leer por palabras o leer toda la línea y separar por palabras (hay funciones para ello) y comprobar si es un número (porque es el único número de la línea) y si lo es, lo guardas.
No sé si hablas de C o de C++, si quieres más ayuda pon tu código para ayudarte mejor. :-X
#516
Programación C/C++ / Re: Derivada en C
12 Junio 2019, 04:57 AM
No puedes crear arrays de tamaño <x> cuando <x> contiene basura porque no ha sido inicializado...
#517
Programación C/C++ / Re: Ayuda FOR
12 Junio 2019, 04:56 AM
No sé si te obligan a usar un <for> y <scanf()> pero no es recomendable usar <scanf()> para esto. Lo suyo sería guardar toda la palabra de una sola vez con <fgets()> y después recorrer la palabra sumando las vocales.

Aparte, esa implementación es un poco ineficiente. Te recomendaría cosas como:
  • Convertir el caracter a minúscula/mayúscula siempre.
  • Unificar los case.


    switch(tolower(clave[i])){
        case 'a': case 'e': case 'i': case 'o': case 'u':
            vocales++;
            break;
    }
#518
Programación C/C++ / Re: Ayuda FOR
12 Junio 2019, 04:23 AM
Es porque los ENTER se están quedando en el buffer y entonces se asignan al siguiente valor.
Pongamos que quieres introducir la palabra "hola", lo que estás guardando es: "h" + ENTER + "o" + ENTER + "l" + ENTER + "a"
#519
Tu problema no está en la función sino en los parámetros... :silbar:
El segundo parámetro es un <unsigned> por lo que no puede tomar valores negativos, entonces cuando el número de caracteres es par funciona correctamente porque termina con <longitud = 0> pero cuando el número de caracteres es impar como es tu caso, el último caso sería <longitud = -1> pero al ser <unsigned> no permite el valor de -1 para la longitud y por eso tienes un problema de acceso en memoria.
#520
No tengo ningún problema con ese código. Lo he probado primero con una versión muy simple (simplemente el <getline()> y el <cin>) y funciona bien así que después he probado tu código y dejando al margen unos caracteres extraños (decir que estoy en Linux) no he tenido ningún problema de que se salte el <cin>.
Prueba a cerrar el proyecto y volver a abrirlo, puede que sea un problema de eso. Sino no sé qué puede ser... :-X