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í:
#include <stdio.h>
void ingresar(int ar[], int longitud, int val, int pos);
void mostrar(int a[], int f);
int main() {
int b[30];
// Calcula longitud del Array b
int longitud = sizeof(b) / sizeof(b[0]);
// Inicializa los valores del Array b a 0
for ( int i = 0; i < longitud; i++ ) {
b[i] = 0;
}
ingresar(b, longitud, 123, 5);
mostrar(b, longitud);
return 0;
}
void ingresar(int ar[], int longitud, int val, int pos) {
int i;
if ( 0 < pos && pos <= longitud ) {
ar[pos - 1] = val;
}
return ;
}
void mostrar(int a[], int f) {
for ( int i = 0; i < f; i++) {
if (a[i] != 0) {
} else {
}
}
}
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>