Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m4rkk0s en 3 Julio 2012, 17:39 pm



Título: ALguien me ayuda a que esto salga? prog C
Publicado por: m4rkk0s en 3 Julio 2012, 17:39 pm
antes uqe nada gracias por mirar el post...
 
Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. int main(void){
  5. size_t largo;
  6.    printf("Ingrese la cantidad de personas en : ");
  7.    fflush(stdin);
  8.    scanf(" %d",&largo); //asigno el valor a largo
  9.    //printf("El largo ingresado es: %d",largo);
  10.  
  11.    //Creo el vector con el tamaño elejido
  12.    char vector1[40][largo];
  13.    int i;
  14.    //Voy llenando el vector con un ciclo for
  15.  
  16.    for (i=1;i<largo;i++){
  17.        printf("\nIngrese el valor para la posicion %d: ",i);
  18.        fflush(stdin);
  19.        gets( vector1[i]);
  20.    }
  21.  
  22.    //Ahora imprimo el vector en cada posicion
  23.    for (i=1;i<largo;i++){
  24.        printf("Vector[%d]: %s \n",i,vector1[i]);
  25.  
  26.    }
  27. }
  28.  

cuando lo ejecuto... no me salen los nombres como yo los pongo me los imprime como todos juntos... y me borra los anteriores...

este lo kree aparte para ver como funcionaba en realidad esto esta dentro de un struc.. pero si no logro hacer que en el vector me almacene los datos completos no los voy a poder ubivcar en el struc..

me sale algo asi cuando lo ejecuto (cargo estos datos hola, como, estas,)
vector[1]=holacomoestas
vector[2]=comoestas
vector[3]=estas
algo asi y no veo el problema.. si algueirn me ayuda desde ya muchas gracias y disculpen la molestia
Código
  1.  


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: DickGumshoe en 3 Julio 2012, 17:50 pm
Por favor, intenta poner el código entre etiquetas GeSHi para que se vea bien, ya que sino algunos subíndices con contenido "i" se pierden y dificulta la lectura del código...

Saludos.


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: DickGumshoe en 3 Julio 2012, 18:01 pm
Bien, veo que ya has puesto el código entre GeSHi.

No puedes inicializar la cadena de caracteres así (poniéndole de tamaño "largo"). Para eso existe la memoria dinámica.

Sería tal y como te dije en http://foro.elhacker.net/programacion_cc/ayuda_con_el_uso_de_malloc_en_char_c-t365940.0.html .

Por otra parte, veo que a los vectores les das valores desde "vector[1]". Debes saber que los vectores empiezan por 0, no por el 1.

Por cierto, te recomiendo no declarar variables en mitad del código. A la larga puede resultar algo lioso cuando trabajes con códigos más extensos y darte problemas.

He editado tu código:

Código
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4.  
  5. int main(){
  6.    int largo;
  7.    char **vector1;
  8.    int i;
  9.    printf("Ingrese la cantidad de personas en : ");
  10.    scanf("%d",&largo);
  11.    fflush(stdin); // Después de scanf si vas a usar gets() encuentras problemas. Por ello, usamos fflush(stdin); (aunque yo recomiendo usar getchar() ).
  12.  
  13.   vector1 = (char**)malloc(largo * sizeof(char*)); //Inicializamos filas
  14.   for(i = 0; i < largo; i++) vector1[i] = (char*)malloc(40 * sizeof(char)); //Inicializamos columnas
  15. /* Con las dos líneas anteriores, hemos creado una matriz de "largo" número de filas, cada cual tiene 40 columnas (40 espacios). */
  16.  
  17.    for (i=0;i<largo;i++){
  18.        printf("\nIngrese el valor para la posicion %d: ",i);
  19.        gets( vector1[i]); //Pedimos cadenas de caracteres
  20.    }
  21.  
  22.  
  23.    for (i=0;i<largo;i++){
  24.        printf("Vector[%d]: %s \n",i+1,vector1[i]); //Imprimimos el contenido
  25.  
  26.    }
  27.  
  28.    free(vector1);
  29.    return 0;
  30. }
  31.  


Saludos.



Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: m4rkk0s en 3 Julio 2012, 18:50 pm
NOOO!!! SOS UN GROSO... TENIA VARIOS ERRORES PERO FUERA DE ESO... AHORA COMPRENDO EL TEMA DE MALLOC CORRECTAMENTE... VA LO ENTIENDO MAS... VOY A EJERCITAR VARIOS EJEMPLOS CON MALLOS ASI ME ACOSTUMBRO A USARLO... Y DE NUEVO... MILLONES DE GRACIAS.. ME ESTAS SALVANDO EL TRABAJO... ES UQE ME HAN EHCHO A HACER OCSAS Q NO SE COMO HACER POR ELLOS SUFRO Y ME FRUSTRO.. PERO GRACIAS!! EN SERIO MCUHAS GRACIAS


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: DickGumshoe en 3 Julio 2012, 18:52 pm
De nada  :D


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: xiruko en 3 Julio 2012, 19:04 pm
buenas, intentando resolver tu duda me he puesto a hacerlo y me ha ido bien para refrescar el concepto de los apuntadores. lo he hecho de una manera distinta a la solucion de arriba, declarando toda la memoria en un solo bloque y luego asignando direcciones de memoria al vector de apuntadores. te dejo el codigo por si te sirve de ayuda:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX 30
  6.  
  7. void limpiarstdin();
  8.  
  9. int main(int argc, char** argv)
  10. {
  11. char *datos, **vector;
  12. int total, i;
  13.  
  14. printf("Inserte el numero de palabras: ");
  15. scanf("%d", &total);
  16. limpiarstdin();
  17.  
  18. //se decalara datos como todo el bloque de memoria
  19. datos=(char*)malloc(MAX*total*sizeof(char));
  20. memset(datos, '\0', sizeof(datos));
  21.  
  22. //vector es un array de apuntadores a char
  23. vector=(char**)malloc(total*sizeof(char*));
  24.  
  25. //asignamos a cada apuntador de "vector" la direccion de memoria que le toque
  26. for (i=0; i<total; i++)
  27. *(vector+i)=(datos+MAX*i);
  28.  
  29. printf("\nInserte las palabras:\n");
  30. for (i=0; i<total; i++)
  31. fgets(*(vector+i), MAX-1, stdin);
  32.  
  33. printf("\nLas palabras son:\n");
  34. for (i=0; i<total; i++)
  35. printf("%s", *(vector+i));
  36.  
  37. printf("\n");
  38. free(vector);
  39. free(datos);
  40. return 0;
  41. }
  42.  
  43. //solucion chapuza ya que lo tipico de getch() nunca he conseguido que me funcione xD
  44. void limpiarstdin()
  45. {
  46. char basura[8];
  47. fgets(basura, 8, stdin);
  48. }


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: m4rkk0s en 3 Julio 2012, 19:22 pm
XIRUKO muchas gracias por tomarte el tiempo de responder mis pregunta realmente te lo agradezco....

ahora lo veo bien al codigo, va lo estudio pero desde ya muchas gracias por tomarte el tiempo y por prestarme de tu tiempo para ayudarme... un abrazo e imenzamente agradecido..


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: m4rkk0s en 3 Julio 2012, 21:45 pm
y sigue el pesado preguntando.... jajaj

pero no me sale.. no imprime el vector.. va en realida lo imprime
Código
  1. fprintf(miarchivo, "CC263_NEW_%s_%s_%s_%s = %s,%s,%s \n",&nuevo_proyecto.nombre, &nuevo_proyecto.nombreproducto,nuevo_proyecto.nombrepet,&nuevo_proyecto.miembrorol,&nuevo_proyecto.miembro,vector1[i]);
va... lo imprime... pero no como quiero q lo imprima...yo quiero q me los muestre todo slo datos que obtuve.. probe otras formas y me imprimio bien los datos.. pero por ejemplo tenia q poner
Código
  1. >fprintf(miarchivo, "CC263_NEW_%s_%s_%s_%s = %s,%s,%s,%s,%s,%s \n",&nuevo_proyecto.nombre, &nuevo_proyecto.nombreproducto,nuevo_proyecto.nombrepet,&nuevo_proyecto.miembrorol,&nuevo_proyecto.miembro,vector1[0],vector1[1],vector1[2],vector1[3],vector1[4],vector1[5],vector1[6]);

para uq lo imprima.. pero si no okupaba todos los vectores.. ni imprime me tira error...

como seria le kreo un for?


Título: Re: ALguien me ayuda a que esto salga? prog C
Publicado por: durasno en 3 Julio 2012, 21:54 pm
Hola! el for lo tenes que hacer solo para vector1. Despues de guardar todos los miembros de la estructura en el archivo, creas el bucle para guardar lo datos del vector1


Saludos