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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Aparecen numeros ramdon en mi array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Aparecen numeros ramdon en mi array  (Leído 1,703 veces)
Ghio97

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Aparecen numeros ramdon en mi array
« en: 13 Agosto 2019, 03:18 am »

Alguien me podria ayudar con mi codigo en C , lo que quiero es que mediante el motodo "ingresar" asigne un valor a una posicion espesifica a un arreglo y las demas posiciones las marque como vacias pero a la hora de ejecutar aparacen numeros de la nada...... alguien sabe como solucionarlo????

#include<stdio.h>

void ingresar(int ar[],int val, int pos);
void mostrar(int a[], int f);


int main (){
   int b[30];
   ingresar(b,123,5);
   mostrar(b,30);
   return 0;
   
}
void ingresar(int ar[],int val, int pos){
   int i;
   int tamanoDelArreglo=sizeof(ar);
   int tamanioDelPrimerDato=sizeof(ar);
   int longitud=tamanoDelArreglo/tamanioDelPrimerDato;
   if (0<pos<=longitud){
      ar[pos]=val;
   }
   
   
   return ;
   }
   
   
   
   void mostrar(int a[], int f){
    for(int i=1;i<=f; i++){
        printf("%i \t ",i);
        if(a!=0){
        printf("%i",a);
        printf("\n");
        }else{
            printf("Vacio");
            printf("\n");
        }
    }
}


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.057



Ver Perfil
Re: Aparecen numeros ramdon en mi array
« Respuesta #1 en: 13 Agosto 2019, 07:47 am »

Saludos,

- Primero tienes que saber que los Array se pasan por Referencia (puntero) a las funciones, por esto no te a ha ser posible hallar el tamaño del Array dado con sizeof() ya que ahora es un puntero, y este devolverá siempre el tamaño en bytes del tipo de variable base, en tu caso un int que suele valer 4 bytes. Luego tu cálculo falla ya que 4 / 4 = 1, entonces nunca alcanza a llegar a la posición 5 que especificas en: ingresar(b, 123, 5);

-- Solución sencilla: Ya que en C se deben especificar los tamaños de los Array (longitud en tu caso), no tiene mucho sentido hallarlos de nuevo XD. O puedes hacerlo fuera de una función.

- Segundo, en C se tiene que declarar las variables y de preferencia también inicializarlas, ya que estas se crean en memoria y tienen como contenido lo que tenga esos espacios de memoria en ese momento, por esto es que te salen números random en tu Array.

- Tercero, revisa tu función mostrar, tu For usa i a 1, y usas ese mismo i tal cual para leer los valores de tu Array, pero el Array empieza en 0. También revisa como guardas tu Valor en la Posición de tu Array.

- De momento esto me funciona a mí:

Código
  1. #include <stdio.h>
  2.  
  3. void ingresar(int ar[], int longitud, int val, int pos);
  4. void mostrar(int a[], int f);
  5.  
  6. int main() {
  7.  int b[30];
  8.  
  9.  // Calcula longitud del Array b
  10.  int longitud = sizeof(b) / sizeof(b[0]);
  11.  
  12.  // Inicializa los valores del Array b a 0
  13.  for ( int i = 0; i < longitud; i++ ) {
  14.    b[i] = 0;
  15.  }
  16.  
  17.  ingresar(b, longitud, 123, 5);
  18.  mostrar(b, longitud);
  19.  return 0;
  20. }
  21.  
  22. void ingresar(int ar[], int longitud, int val, int pos) {
  23.  int i;
  24.  if ( 0 < pos && pos <= longitud ) {
  25.    ar[pos - 1] = val;
  26.  }
  27.  return ;
  28. }
  29.  
  30. void mostrar(int a[], int f) {
  31.  for ( int i = 0; i < f; i++) {
  32.    printf("%i \t ", i + 1);
  33.    if (a[i] != 0) {
  34.      printf("%i", a[i]);
  35.      printf("\n");
  36.    } else {
  37.      printf("Vacio");
  38.      printf("\n");
  39.    }
  40.  }
  41. }

Citar
C:\Users\EdSon\Desktop>gcc ghio.c -o ghio.exe && ghio.exe
1        Vacio
2        Vacio
3        Vacio
4        Vacio
5        123
6        Vacio
7        Vacio
8        Vacio
9        Vacio
10       Vacio
11       Vacio
12       Vacio
13       Vacio
14       Vacio
15       Vacio
16       Vacio
17       Vacio
18       Vacio
19       Vacio
20       Vacio
21       Vacio
22       Vacio
23       Vacio
24       Vacio
25       Vacio
26       Vacio
27       Vacio
28       Vacio
29       Vacio
30       Vacio

C:\Users\EdSon\Desktop>


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Aparecen numeros ramdon en mi array
« Respuesta #2 en: 13 Agosto 2019, 17:26 pm »

Si necesitas que un array local se inicialice a 0 puedes usar la propiedad de C que dice que en la definición de un array inicializa los primeros elementos a valores explícitos y el resto a 0 hasta rellenarlo.

Esto quiere decir que si escribes
Código:
int b[30] = {0};
el array se definirá con todos sus valores a 0. Mucho mejor que tener que usar un bucle.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
averiaguar numeros repetidos en un array
Java
ped18 7 7,286 Último mensaje 10 Enero 2012, 17:18 pm
por [Case]
Array que lea ciertos números
Programación C/C++
DickGumshoe 2 2,149 Último mensaje 15 Enero 2012, 01:18 am
por DickGumshoe
Ramdon siempre me repite los mismo numeros
Java
lluvplay 3 2,405 Último mensaje 24 Mayo 2012, 05:00 am
por RyogiShiki
Array con numeros primos.
Programación C/C++
Ja_90 2 25,782 Último mensaje 5 Septiembre 2014, 17:16 pm
por Ja_90
Numeros raros que aparecen en mi bluetooth,que son? « 1 2 »
Android
DonPilin 16 21,931 Último mensaje 6 Abril 2022, 01:44 am
por Horaciom
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines