Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ataulfo7 en 11 Abril 2015, 16:53 pm



Título: Una duda con el almacenamiendo en c...
Publicado por: Ataulfo7 en 11 Abril 2015, 16:53 pm
Hola buenas, tengo este problemilla, tengo esta sintaxis.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. float * LeeVector(int n){
  5. int v1[n];
  6. for (int i=0;i<n;i++){
  7. printf("Dame el %d numero del vector ",i+1);
  8. scanf("%d",&v1[i]);
  9. }
  10. }
  11.  
  12. float * EscalarVector(float * v, int n, float x){}
  13.  
  14. void ImprimeVector(float * v, int n){
  15.    for (int i=0;i<n;i++) printf("%d ",v[i]);
  16. }
  17.  
  18. int main(){
  19. int n;
  20. printf("Intruduzca el tamano del vector ");
  21. scanf("%d",&n);
  22. LeeVector(n);
  23. }
  24.  
Pero lo que no consigo hacer, tras empezar en el main, e ir a "LeeVector", consigo crear un vector llamado v1, pero lo que no se, es como almacenarlo, para tras tener el vector ya leido con la funcion mencionada antes, poder llevarlo a la función Escalar vector, y de ahi, llevarlo a Imprimir vector, ya que si lo intento a secas poniendo ImprimirVector(v1,n) Me devuelve todo 0, y si lo pongo ImprimirVector(v1,n) me dice que la i no esta declarada.... No se si es con apuntadores, con malloc, pero no logro conseguirlo....
Gracias al que ayude! ^^  ;D


Título: Re: Una duda con el almacenamiendo en c...
Publicado por: rir3760 en 11 Abril 2015, 17:16 pm
Para empezar en la función "LeeVector" falta el valor de retorno y no puedes retornar el array "v1" ya que es local a esa función, cuando esta termina el array se destruye. Por ultimo indicas que el valor de retorno de la función es "float *" cuando los elementos del array son de tipo int.

En su lugar debes reservar un bloque de memoria mediante la función malloc usando la dirección de este como valor de retorno de la función. Mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int *LeeVector(int n)
  5. {
  6.   int *p;
  7.   int i;
  8.  
  9.   if ((p = malloc(n * sizeof *p)) != NULL)
  10.      for (i = 0; i < n; i++){
  11.         printf("Dame el %d numero del vector: ", i + 1);
  12.         fflush(stdout);
  13.         scanf("%d", p + i);
  14.      }
  15.  
  16.   return p;
  17. }
  18.  
  19. /* ... */
  20.  
  21. int main(void)
  22. {
  23.   int n;
  24.   int *p;
  25.  
  26.   puts("Intruduce el tamano del vector:");
  27.   scanf("%d", &n);
  28.   p = LeeVector(n);
  29.  
  30.   /* Uso del bloque apuntado por p */
  31.  
  32.   free(p);
  33.  
  34.   return EXIT_SUCCESS;
  35. }

Un saludo


Título: Re: Una duda con el almacenamiendo en c...
Publicado por: Ataulfo7 en 11 Abril 2015, 17:45 pm
Me has arreglado el problema de almacenar el vector con malloc, Gracias!
Pero seguiria con el mismo problema, de que cuando llamo a la función imprime vector, la pongo tal que asi,
Código
  1. ImprimeVector(p,n);
Y me da de vuelta solo 0 como números haya puesto...
Pero sin embargo en el propio main si lo escribo asi
Código
  1. for (int i=0;i<n;i++) printf("%d ",*p);
Si me sale...
 :-X :-X


Título: Re: Una duda con el almacenamiendo en c...
Publicado por: rir3760 en 11 Abril 2015, 17:54 pm
Eso sucede porque en el bloque de memoria almacenas los valores leídos con scanf de tipo int, para que las demás funciones tengan el comportamiento esperado las debes modificar en la misma linea: se recibe un puntero de tipo "int *" y se procesan los elementos del bloque como enteros.

Un saludo