ALguien me ayuda a que esto salga? prog C

Iniciado por m4rkk0s, 3 Julio 2012, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

m4rkk0s

antes uqe nada gracias por mirar el post...

#include<stdio.h>
#include<conio.h>

int main(void){
size_t largo;
   printf("Ingrese la cantidad de personas en : ");
   fflush(stdin);
   scanf(" %d",&largo); //asigno el valor a largo
   //printf("El largo ingresado es: %d",largo);

   //Creo el vector con el tamaño elejido
   char vector1[40][largo];
   int i;
   //Voy llenando el vector con un ciclo for

   for (i=1;i<largo;i++){
       printf("\nIngrese el valor para la posicion %d: ",i);
       fflush(stdin);
       gets( vector1[i]);
   }

   //Ahora imprimo el vector en cada posicion
   for (i=1;i<largo;i++){
       printf("Vector[%d]: %s \n",i,vector1[i]);

   }
}


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

DickGumshoe

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.

DickGumshoe

#2
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:



#include<stdio.h>
#include<conio.h>

int main(){
   int largo;
   char **vector1;
   int i;
   printf("Ingrese la cantidad de personas en : ");
   scanf("%d",&largo);
   fflush(stdin); // Después de scanf si vas a usar gets() encuentras problemas. Por ello, usamos fflush(stdin); (aunque yo recomiendo usar getchar() ).

  vector1 = (char**)malloc(largo * sizeof(char*)); //Inicializamos filas
  for(i = 0; i < largo; i++) vector1[i] = (char*)malloc(40 * sizeof(char)); //Inicializamos columnas
/* Con las dos líneas anteriores, hemos creado una matriz de "largo" número de filas, cada cual tiene 40 columnas (40 espacios). */

   for (i=0;i<largo;i++){
       printf("\nIngrese el valor para la posicion %d: ",i);
       gets( vector1[i]); //Pedimos cadenas de caracteres
   }


   for (i=0;i<largo;i++){
       printf("Vector[%d]: %s \n",i+1,vector1[i]); //Imprimimos el contenido

   }
   
    free(vector1);
   return 0;
}



Saludos.


m4rkk0s

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

DickGumshoe


xiruko

#5
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:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 30

void limpiarstdin();

int main(int argc, char** argv)
{
char *datos, **vector;
int total, i;

printf("Inserte el numero de palabras: ");
scanf("%d", &total);
limpiarstdin();

//se decalara datos como todo el bloque de memoria
datos=(char*)malloc(MAX*total*sizeof(char));
memset(datos, '\0', sizeof(datos));

//vector es un array de apuntadores a char
vector=(char**)malloc(total*sizeof(char*));

//asignamos a cada apuntador de "vector" la direccion de memoria que le toque
for (i=0; i<total; i++)
*(vector+i)=(datos+MAX*i);

printf("\nInserte las palabras:\n");
for (i=0; i<total; i++)
fgets(*(vector+i), MAX-1, stdin);

printf("\nLas palabras son:\n");
for (i=0; i<total; i++)
printf("%s", *(vector+i));

printf("\n");
free(vector);
free(datos);
return 0;
}

//solucion chapuza ya que lo tipico de getch() nunca he conseguido que me funcione xD
void limpiarstdin()
{
char basura[8];
fgets(basura, 8, stdin);
}

m4rkk0s

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..

m4rkk0s

y sigue el pesado preguntando.... jajaj

pero no me sale.. no imprime el vector.. va en realida lo imprime
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
>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?

durasno

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
Ahorrate una pregunta, lee el man