Autor
|
Tema: Problema con constantes en c (Leído 2,587 veces)
|
BJM
Desconectado
Mensajes: 41
|
El error se produce en la linea 11: void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas), paso las constantes nfilas y ncolumnas como parametro, es valido? #include <stdlib.h> #include <stdio.h> #define ncolumnas 2 #difine nfilas 2 #define libre 0 #define ocupado 1 int menu(); void reservarboletos(int venta[][ncolumnas]); void cancelarboletos(int venta[][ncolumnas]); void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas); int menu(){ int resp; printf("\n 1 reservar boletos"); printf("\n 2 cancelar boletos"); printf("\n 3 mostrar boletos"); return resp; } void reservarboletos(int venta[][ncolumnas]){ int fila=0,col=0; printf("\n Ingrese fila del asiento: "); scanf("%d",&fila ); printf("\n Ingrese columna del asiento: "); scanf("%d",&col ); if(venta[fila][col]==ocupado){ printf("\n Asiento ocupado "); } else{ venta[fila][col]==ocupado; printf("\n Asiento[%d][%d] reservado con exito",fila ,col ); } } void cancelarboletos(int venta[][ncolumnas]){ int fila=0,col=0; printf("\n Ingrese fila del asiento a cancelar: "); scanf("%d",&fila ); printf("\n Ingrese columna del asiento a cancelar: "); scanf("%d",&col ); if(venta[fila][col]!=ocupado){ printf("\n Asiento no reservado"); } else{ venta[fila][col]=libre; printf("\n Asiento [%d][%d] ha sido cancelado",fila ,col ); } } void mostrarvendidos(int venta[][ncolumnas]){ for(int i=0;i<nfilas;i++){ for(int j=0;j<ncolumnas;j++) if(venta[][ncolumnas]==ocupado){ printf("\n Asiento[%d][%d]: Ocupado\n",i ,j ); } else{ printf("\n Asiento[%d][%d]: Libre\n",i ,j ); } } } main(){ int puest=0; do{ switch(menu()){ case 1: if(puest<4){ reservarboletos(venta); puest++; } else{ printf("\n Agotados los puestos"); } break; case 2: cancelarboletos(venta); break; case 3: mostrarvendidos(venta,nfilas,ncolumnas); break; case 4: break; } }while((resp>0)&&(resp<4)); }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
No tienes que pasarlo, nfilas y ncolumnas son globales.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El error se produce en la linea 11: void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas), paso las constantes nfilas y ncolumnas como parametro, es valido? No. El problema se debe a que el preprocesador actúa primero y al sustituir las macros en la declaración: #define ncolumnas 2 /* "difine" cuando deberia ser "define" */ #difine nfilas 2 /* ... */ void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);
Esta termina como: void mostrarvendidos(int venta[][ncolumnas], int 2,int 2);
Por eso el compilador genera el mensaje de error. Para solucionarlo solo tienes que cambiarla para que coincida con su definición: void mostrarvendidos(int venta[][ncolumnas]);
Hay otros errores en el programa: * Uso del operador de comparación "==" cuando debería ser asignación "=": venta[fila][col]==ocupado;
* En la función "mostrarvendidos" no indicas el indice del elemento a procesar: if(venta[][ncolumnas]==ocupado){
* El array venta tienes que declararlo en la función main y pasarlo a las otras funciones (falta). * La variable resp la debes declarar en la función main (falta). 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
|
|
|
BJM
Desconectado
Mensajes: 41
|
Gracias ya he pulido los errores que mencionaste , ahora el problema es lo siguiente: *** 1 reservar boletos 2 cancelar boletos 3 mostrar boletos 4 salir Eleccion: 1 Ingrese fila del asiento: 0 Ingrese columna del asiento: 0 Asiento[0][0] reservado con exito *** 1 reservar boletos 2 cancelar boletos 3 mostrar boletos 4 salir Eleccion: 3 Asiento[0][0]:=>libre Asiento[0][1]:=>libre Asiento[1][0]:=>libre Asiento[1][1]:=>libre *** 1 reservar boletos 2 cancelar boletos 3 mostrar boletos 4 salir Eleccion: Este es el prog ejecutable, reservo el asiento - , pero luego cuando selecciono mostrar boletos el asiento[0][0] dice estar libre cuando deberia estar ocupado.
#include <stdlib.h> #include <stdio.h> #define NCOLUMNAS 2 #define NFILAS 2 #define LIBRE 0 #define OCUPADO 1 int mostrarmenu(); void reservarboletos(int venta[NFILAS][NCOLUMNAS]); void cancelarboletos(int venta[NFILAS][NCOLUMNAS]); void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]); int resp=0; main(){ int boletos[NFILAS][NCOLUMNAS]={0}; do{ switch(mostrarmenu()){ case 1: reservarboletos(boletos); break; case 2: cancelarboletos(boletos); break; case 3: mostrarvendidos(boletos); break; case 4: break; } }while((resp>0)&&(resp<4)); } int mostrarmenu(){ printf("\n 1 reservar boletos"); printf("\n 2 cancelar boletos"); printf("\n 3 mostrar boletos"); return resp; } void reservarboletos(int venta[NFILAS][NCOLUMNAS]){ int fila,col; printf("\n Ingrese fila del asiento: "); printf("\n Ingrese columna del asiento: "); if(venta[fila][col]==OCUPADO) { printf("\n Asiento ocupado "); } else{ venta[fila][col]==OCUPADO; printf("\n Asiento[%d][%d] reservado con exito",fila ,col ); } } void cancelarboletos(int venta[NFILAS][NCOLUMNAS]){ int fila,col; printf("\n Ingrese fila del asiento a cancelar: "); printf("\n Ingrese columna del asiento a cancelar: "); if(venta[fila][col]==LIBRE){ printf("\n Asiento no reservado"); } else{ venta[fila][col]=LIBRE; printf("\n Asiento [%d][%d] ha sido cancelado",fila ,col ); } } void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]){ int i,j; for(i=0;i<NFILAS;i++){ for(j=0;j<NCOLUMNAS;j++){ printf("\n Asiento[%d][%d]:",i ,j ); if(venta[i][j]==LIBRE){ } else{ } } } }
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
Hola! el error ya te lo marco rir3760 antes: * Uso del operador de comparación "==" cuando debería ser asignación "=":" En reservaboletos() debes usar la asignacion: else{ venta[fila][col]==OCUPADO; /* <--- aca va el "=" no el "==" */ printf("\n Asiento[%d][%d] reservado con exito",fila ,col ); } }
Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
BJM
Desconectado
Mensajes: 41
|
Pusshhh necesito lentes! Gracias a los dos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Constantes fallas con el CloneDVD
Software
|
kines
|
1
|
1,895
|
13 Julio 2005, 23:07 pm
por Siuto
|
|
|
constantes
Programación Visual Basic
|
geel
|
1
|
1,599
|
12 Junio 2006, 17:26 pm
por NYlOn
|
|
|
Constantes Hexedecimales
Programación Visual Basic
|
Yekka
|
2
|
1,796
|
4 Noviembre 2007, 03:40 am
por HaDeS, -
|
|
|
Constantes del teclado (VK_)
Programación Visual Basic
|
Majinz
|
3
|
4,757
|
27 Septiembre 2011, 12:29 pm
por Majinz
|
|
|
[Solucionado] Constantes de carácter y constantes de cadena de carácteres
Programación C/C++
|
Caster
|
4
|
4,369
|
20 Febrero 2012, 15:43 pm
por Caster
|
|