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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con los void
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con los void  (Leído 6,775 veces)
Sayuri108

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Problemas con los void
« en: 6 Enero 2018, 15:00 pm »

Hola!
Estoy haciendo un programa en el que uso void y arrays, y no se por que en cuanto llego a un void el array cambia de tamaño  :huh:
Este es el punto deonde me da problemas:

Código
  1. const int tamaño = 4;
  2.  
  3. typedef int tCode[tamaño];
  4.  
  5. void codigoAleatorio(tCode code) {    //Aqui cambia a ser code ={0} en vez de code = {0,0,0,0}
  6. int random = 0;
  7. srand(time(NULL));
  8. for (int i = 0; i < TAM_CODIGO; i++) {
  9. random = rand() % 7;
  10. code[i] = random; (aqui no se por que no salen [] con la i dentro despues de code)
  11. }
  12. }
  13.  
  14. el main esta asi:
  15. int main(){
  16.     tCode code = {};
  17.      /*funcion*/
  18. }

alguna idea?
Gracias.


« Última modificación: 6 Enero 2018, 15:08 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Problemas con los void
« Respuesta #1 en: 6 Enero 2018, 15:08 pm »

Citar
(aqui no se por que no salen [] con la i dentro despues de code)

porque debes usar las etiquetas GeSHi, si no [ i ] significa cursiva, porfa corrige tu codigo para ver bien el problema y en el main si es posble pon más codigo relacionado


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Sayuri108

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problemas con los void
« Respuesta #2 en: 6 Enero 2018, 15:18 pm »

vale, gracias.
Este es mi main:
Código
  1. int main() {
  2. int opcion = menu();
  3. EjecutarMenu(opcion);
  4. return 0;
  5. }
  6. int EjecutarMenu(int opcion) {
  7. tCodigo codigo = {};
  8. tCodigo hipotesis = {};
  9. bool admiteRepetidos = false;
  10. int colocados = 0, descolocados = 0;
  11. while (opcion != 0) {
  12. switch (opcion) {
  13. case (1): {//funcion no repetidos
  14. opcion1(codigo, hipotesis, admiteRepetidos, colocados, descolocados);
  15. }
  16.  break;
  17. case (2): {//funcion con repetidos
  18. opcion2(codigo, hipotesis, admiteRepetidos, colocados, descolocados);
  19. }
  20.  break;
  21. }
  22. }
  23. return opcion;
  24. }

las funciones opcion1 y opcion2 son dos void bastante parecidos y en cuanto llega al void cambia el  tamaño del array.

Código
  1. void opcion1(tCodigo codigo, tCodigo hipotesis, bool admiteRepetidos, int colocados, int descolocados) {
  2. admiteRepetidos = false;
  3. codigoAleatorio(codigo, admiteRepetidos);
  4. cout << "Introduce el codigo (palabra de 4 letras con alguna de las siguientes, R, Z, V, A, M, B): ";
  5. for (int s = 0; s < TAM_CODIGO - 1; s++)
  6. cin >> hipotesis[s];
  7. compararCodigos(codigo, hipotesis, colocados, descolocados);
  8. ImprimirPantalla(codigo, hipotesis, colocados, descolocados);
  9. while (colocados != TAM_CODIGO)
  10. cout << "Introduce el codigo (palabra de 4 letras con alguna de las siguientes, R, Z, V, A, M, B): ";
  11. for (int s = 0; s < TAM_CODIGO - 1; s++)
  12. cin >> hipotesis[s];
  13. compararCodigos(codigo, hipotesis, colocados, descolocados);
  14. ImprimirPantalla(codigo, hipotesis, colocados, descolocados);
  15. }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problemas con los void
« Respuesta #3 en: 6 Enero 2018, 16:30 pm »

Tienes algunos fallos que atribuyó a que aunque no conoces del todo el lenguaje y buenas prácticas, pero me gustaría que explicarás en qué notas que el array cambia el tamaño.
Lo que si he observado es que haces cosas así:

Código:
for (int s = 0; s < TAM_CODIGO - 1; s++)

TAM_CODIGO marca el número de elementos, como C empieza por el 0 el máximo índice será TAM_CODIGO -1, y precisamente ese es al que va a llegar el for con la sentencia s<TAM_CODIGO: mientras s esté por debajo de TAM_CODIGO se va a ejecutar su código asociado. Pero tú le restas 1 a TAM_CODIGO con lo que no ejecutará las veces suficientes el código asociado, te faltará una. Tal vez eso es lo que te pasa.
En línea

Sayuri108

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problemas con los void
« Respuesta #4 en: 6 Enero 2018, 16:47 pm »

Código:
for (int s = 0; s < TAM_CODIGO - 1; s++)

es que comparo dos cosas en las posiciones del array, entonces no quiero que se salga del array (comparar el ultimo elemento del array con la nada), el ultimo elemento de array solo se compara con su anterior, entonces x solo puede llegar a valer como maximo 3. Pero el problema es que en cuanto pasa a un void, el array cambia automaticamente de tamaño, en vez de seguir siendo de tamaño cuatro, pasa a ser de tamaño 1.

ahi dejo una captura de como se cambia el solito
https://gyazo.com/3643d198efb64fb42a8b85c5cb4c50bf
https://gyazo.com/072244555cacd0ef0a6fb45f4a39485b
« Última modificación: 6 Enero 2018, 17:35 pm por Sayuri108 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problemas con los void
« Respuesta #5 en: 6 Enero 2018, 18:24 pm »

Vale. El void no es lo que pasas sino el tipo de dato devuelto de la función. Por otra parte te diría que mires un paper de lo que ocurre cuando se usa un array como argumento.

A grandes rasgos un array de una dimensión es lo mismo que un puntero, solo se pasará la dirección del primer elemento, todos los demás 'adornos' como el tipo de dato del array y loas restantes dimensiones que pueda tener (se especifican todas las dimensiones de un array menos la de más a la izquierda) solo sirven para, internamente, hacer aritmética y encontrar el dato deseado cuando usas notación de array.

Por tanto un array, cuando es pasado a una función, pierde toda la información de su tamaño y, a ojos del compilador, es un puntero.
En línea

Sayuri108

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problemas con los void
« Respuesta #6 en: 6 Enero 2018, 18:27 pm »

entonces como puedo hacerlo?
por que me piden que lo haga asi (es un trabajo de clase) y por narices tengo que usar voids,de hecho me ponen algunos asi:
Código
  1. void codigoAleatorio(tCodigo codigo, bool admiteRepetidos);
y tengo que rellenarlos, otros solo me dan el nombre de la funcion.
y los que me dan "completos" no puedo modificarlos
asi que por ejemplo no puedo ponerle :
Código
  1. void codigoAleatorio(const tCodigo codigo, bool admiteReetidos);
« Última modificación: 6 Enero 2018, 18:37 pm por Sayuri108 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problemas con los void
« Respuesta #7 en: 6 Enero 2018, 18:53 pm »

Olvídate del void. En este caso indica que la función no devuelve ningún valor, solo hace un trabajo (en otros lenguajes se llamaría procedimiento o subprograma).

Cuando se pasa un array a una función lo normal es pasar también el número de elementos que el array contiene en otro argumento y así la función conocerá el límite. De todas formas tú usas una variación de eso qué es mediante una variable global llamada TAM_CODIGO, que por otra parte, en el primer código que has mostrado la llamas 'tamaño'.

Es decir, dentro de la función debes olvidarte del tamaño del array, lo verás como si fuera un puntero (o un entero sin signo, por si no has llegado a los punteros) y usa para trabajar con él los límites, ya sean variables globales o argumentos que lo van a acompañar en las llamadas a funciones.
En línea

Sayuri108

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Problemas con los void
« Respuesta #8 en: 6 Enero 2018, 18:58 pm »

entonces a la vuelta de vacaciones tendre que hablar con el profesor, por que quiere que use esa funcion y que haga algo determinado y no me puedo salir del guion...
Gracias por la ayuda
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problemas con los void
« Respuesta #9 en: 6 Enero 2018, 19:22 pm »

¿Exactamente qué te pide exactamente?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(void *) en funciones
Programación C/C++
Shon 4 5,332 Último mensaje 25 Enero 2011, 16:06 pm
por Littlehorse
dev-c++ ----> ¿void?
Programación C/C++
lalocr 7 18,937 Último mensaje 21 Abril 2011, 11:05 am
por <<<-Basura->>>
funciones INT vs VOID « 1 2 »
Programación C/C++
ALONSOQ 14 7,266 Último mensaje 4 Septiembre 2012, 16:49 pm
por ALONSOQ
Convertir de void a int
Programación C/C++
mester 3 5,299 Último mensaje 22 Noviembre 2015, 20:07 pm
por mester
Problema con un void
Programación C/C++
grossgore 2 1,841 Último mensaje 4 Mayo 2017, 16:10 pm
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines