elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Una duda con el almacenamiendo en c...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una duda con el almacenamiendo en c...  (Leído 1,522 veces)
Ataulfo7

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Una duda con el almacenamiendo en c...
« 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


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Una duda con el almacenamiendo en c...
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Ataulfo7

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: Una duda con el almacenamiendo en c...
« Respuesta #2 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
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Una duda con el almacenamiendo en c...
« Respuesta #3 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,766 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,796 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,879 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,342 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA][LICENCIA][GPL]tengo una duda sobre las caracteristicas de la licencia GPL
Dudas Generales
Noxware 0 1,877 Último mensaje 2 Mayo 2014, 00:34 am
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines