Autor
|
Tema: matriz de estructuras (Leído 2,068 veces)
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
Hola que tal?, tengo el siguiente código #include <stdio.h> #include <stdlib.h> #include <ncurses.h> #include <pthread.h> struct casillas{ WINDOW *casilla; }; void iniVideo(); struct casillas panel(); void mostrar(struct casillas casillero[10][10], int, int, int); void fin(); int main() { iniVideo(); int x = 2; int y = 3; struct casillas casillero[10][10]; casillero[10][10] = panel(); mostrar(casillero[10][10], 69, x, y); fin(); return 0; } void iniVideo() { initscr(); start_color(); init_pair(1, 0, 7); //letras, fovdo. menu init_pair(2, 7, 0); // panel números init_pair(3, 0, 2); // casilla x init_pair(4, 0, 6); cbreak(); noecho(); keypad(stdscr, true); curs_set(0); refresh(); } struct casillas panel() { struct casillas casillero[10][10]; int k, i, y, x; y = 5; x = 16; //casillas for(i = 0; i < 10; i++) { for(k = 0; k < 10; k++) { casillero[i][k].casilla = newwin(3, 6, y, x); box(casillero[i][k].casilla, 0,0); wbkgd(casillero[i][k].casilla, COLOR_PAIR(2)); wrefresh(casillero[i][k].casilla); x+=6; } y+=3; x = 16; } return casillero[10][10]; } void mostrar(struct casillas casillero[10][10], int num, int x, int y) { mvwprintw(casillero[x][y].casilla, 2, 1, "%i",num); wrefresh(casillero[x][y].casilla); } void fin() { endwin(); }
El cual en la línea del mani casillero[10][10] muestra la matriz creada, pero cuando invoco la funcion que sigue 'mostrar(casillero[10][10], 69, x, y);' me da el siguiente error: note: expected ‘struct casillas (*)[10]’ but argument is of type ‘struct casillas’ void mostrar(struct casillas casillero[10][10], int, int, int); Alguien podría ayudarme por favor? Gracias.
|
|
|
En línea
|
|
|
|
K-YreX
|
mostrar(casillero[10][10], 69, x, y);
El error está ahí porque como te dice el propio error, la función está esperando un puntero de arrays (es decir, una matriz) y tú le estás pasando un elemento concreto de esa matriz (la casilla [10][10] de la matriz, la cual además se sale de los límites). La opción correcta sería: mostrar(casillero, 69, x, y);
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
Hola, gracias por tu tiempo. Por qué dices que la matriz se pasa de los límites?
|
|
|
En línea
|
|
|
|
K-YreX
|
Porque si tienes una matriz de 10x10, su último elemento es matriz[9][9]. Entonces aparte de que está mal pasado el parámetro, solo he comentado que esa posición además no es válida. Era solo un comentario extra que no era necesario para solucionar el problema, pero nunca está de más ![:-X](https://foro.elhacker.net/Smileys/chef/lipsrsealed.gif)
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
Entiendo. Muchísimas gracias por tu ayuda. Buen finde! ![:D](https://foro.elhacker.net/Smileys/chef/cheesy.gif)
|
|
|
En línea
|
|
|
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
Hola YreX-DwX, volví. Cómo podría hacer, teniendo en cuenta el código anterior para que al llamar a la funcion void mostrar(struct casillas casillero[10][10], int num, int x, int y) anote en el casillero dado (x,y) el valor dado(num). ya que no logro cambiar los valores iniciales de la matriz. gracias y disculpá la molestia
|
|
|
En línea
|
|
|
|
K-YreX
|
Tu matriz <casillero> es una matriz donde cada celda es un objeto de tipo <casillas>. Y cada objeto de tipo <casillas> sólo contiene un puntero de tipo <WINDOW>. Nunca he trabajado con ello pero por lo que veo en tu código anterior parece que se inicializa usando <newwin(a, b, x, y) donde no sé que es a y b pero si uno de esos dos valores es el que quieres sustituir por <num> simplemente pasa <num> como parámetro.
Sin embargo <newwin()> ya lo usas en la función <panel()> por lo que estarías creando el doble de objetos. Además en la línea 21 de tu primer código tienes un error, no puedes asignar <panel()> (función que devuelve una casilla) a <casillero[10][10]> por lo que te comenté de que esa posición se sale de los límites de tu matriz.
Si me comentas que hacen las funciones que estás usando y que representan los parámetros quizás pueda ayudarte más.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
YreX-DwX, to logré hacer que el programa funcione, pero el código no es el que prefiero hacer. declaré la estructura casillas casillero[10][10] como variable global. la funcion struct casillas panel() devuelve una matriz que en realidad son 10x10 ventanas enlas que quiero ingresar un valor x pasado por parámetro. Mi idea es usar ese panel en otra parte del codigo parte del codigo y asignarle valores ingresados por teclado Por eso en la funcion ing_resp_mostrar_result(struct casillas casilleros_panel[10][10], int x, int y, int producto, int mov) es la responsable de llenar la matriz con valores ingresados por el usuario
|
|
|
En línea
|
|
|
|
K-YreX
|
A lo que me refiero es que qué función de las que ya existen o que método hay para asignar un valor a un <WINDOW *> ya que desconozco su uso, entonces no puedo ayudarte más específicamente.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
codX
Desconectado
Mensajes: 65
Es más complejo de lo que crees...
|
te entiendo perfectamente YreX-DwX. El problema es que sería demasiado rollo pasarte todo el código. Igualmente vuevlo a agradecer mucho tu tiempo y disposición a ayudar. Que tengas un lindo fin de semana. !!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda - Buscar si existe una matriz dentro de otra matriz
Programación Visual Basic
|
EddyW
|
2
|
5,830
|
14 Agosto 2010, 06:18 am
por EddyW
|
|
|
MATRIZ que imprima como una matriz en forma de cuadrado... ayudaaaaa!! help
Programación C/C++
|
oscarpy
|
3
|
8,515
|
9 Abril 2012, 16:23 pm
por Xandrete
|
|
|
Ayuda con matriz dinámica de estructuras
Programación C/C++
|
darklatios2006
|
4
|
2,763
|
21 Marzo 2013, 19:58 pm
por amchacon
|
|
|
Estructuras dentro de Estructuras (Visual Basic 2013)
.NET (C#, VB.NET, ASP)
|
Tazmania40
|
0
|
1,670
|
3 Marzo 2017, 21:44 pm
por Tazmania40
|
|
|
Llenar matriz de estructuras con punteros en c
Programación C/C++
|
facster7
|
6
|
3,153
|
14 Julio 2018, 09:25 am
por facster7
|
|