PDA

Ver la Versión Completa : Ayuda con programa de C


megadanzig
18-03-2004, 22:47:53
Hola, estoy TRATANDO de hacer un programa que emule un cajero automatico para la escuela, (sin tener que accesar bases de datos ni nada, solo que tenga todos los menues, etc.) y hasta ahora se me ha ocurrido hacer algunos "buckles" con el Switch, pero parece que no puedes hacer un switch dentro de otro, lo que significaria que no puedes hacer un sub-menu. en resumen, estoy perdido y necesito ayuda con el prog. voy a pegar el codigo del programa para que me ayuden con los errores que da al compilarlo:

#include <stdio.h>

int menu1 = 0;
int menucuenta = 0;
int menuretiro = 0;
int desiciont = 0;

main()


{

printf ("Bienvenido al sistema ATH de Banco X\n");
printf ("Seleccione la transaccion que desea realizar\n");
printf ("1-Retiro de efectivo\t\t 2-Depositos\n");
printf ("3-Recepcion de pagos\t\t 4-Transferencias\n");
printf ("5-Solicitud chequera\t\t 6-Dinero al instante\n");
printf ("7-Consulta balances\n");

printf ("Elija su opcion:");
scanf ("%d", menu1);
switch (menu1);
{
case menu1=1 :
printf ("De que cuenta desea realizar el retiro?");
printf ("1-Cuenta corriente\t\t 2-Cuenta de ahorros\n");
scanf ("%d", menucuenta);


switch (menucuenta);
{
case menucuenta=1 | 2 :
printf ("Que cantidad de dinero desea usted retirar?\n");
printf ("1-100.00RD$\t\t 2-200.00RD$\n");
printf ("3-RD$400.00\t\t 4-500.00RD$\n");
printf ("5-RD$800.00\t\t 6-otra cantidad\n");
scanf ("%d",menuretiro);

switch (menuretiro);
{
case menuretiro=1 | 2 | 3 | 4 | 5 :
printf ("Por favor espere mientras la transaccion es procesada...\n");

printf ("Transaccion finalizada\n");
printf ("\n");
printf ("Desea realizar otra transaccion?\n");
printf ("1-Si\t\t 2-no\n");
scanf ("%d", desiciont);

switch (desiciont);
{
case desiciont= 1 :
goto inicio;
break;
case desiciont= 2 :
goto final;
break;
default : printf ("error en el valor\n");
}
break;
case menuretiro=6 :
printf ("introduzca la cantidad deseada\n");
scanf ("%d",cantidadr);
break;
default : printf ("Valor no valido\n");
}
default : printf ("Valor no valido\n");
}

case menu1=2 :
printf ("Esta opcion solo esta disponible en los cajeros automaticos ubicados en las oficinas del Banco X\n");
break;

case menu1=3 :
printf ("Esta opcion solo esta disponible en los cajeros automaticos ubicados en las oficinas del Banco X\n");
break;

case menu1=4 :
printf ("Que tipo de transferencia desea?\n");
break;

default :
printf ("Opcion no valida");
}


return (0);
}


es lo que llevo hasta ahora, me faltan mas menues, como
podran apreciar, pero si me indican como hacer un sub-menu por
lo menos, creo que podria continuar. es en C (no visual)
Gracias por adelantado, me van a salvar la vida! ^_^

santana
19-03-2004, 01:06:44
:p
Hola. A simple vista, lo primero:


switch (menu1);
{
case menu1=1 :


No debes repetir la variable que ya especificas en el swith, ni poner el punto y coma.

switch (menu1)
{
case 1 :


Por hacer un switch dentro de la opcion de otro switch, si que se puede hacer. No hay problema.
Otra cosa que no entiendo es esta:

printf ("De que cuenta desea realizar el retiro?");
printf ("1-Cuenta corriente\t\t 2-Cuenta de ahorros\n");
scanf ("%d", menucuenta);


switch (menucuenta);
{
case menucuenta=1 | 2 :
printf ("Que cantidad de dinero desea usted retirar?\n");
printf ("1-100.00RD$\t\t 2-200.00RD$\n");
printf ("3-RD$400.00\t\t 4-500.00RD$\n");
printf ("5-RD$800.00\t\t 6-otra cantidad\n");
scanf ("%d",menuretiro);



¿Para que usas un swith, si independientemente del valor de menucuenta vas a ejecutar el mismo código?

Y finalmente, el valor de retorno del main, en principio te declaras la funcion como void, por lo que no tendrías que devolverlo, o declararla como

int main (void)

Ah!! Para la próxima, es aconsejable que tabules el código y que lo presentes dentro de la etiqueta CODE, que la tienes ahi arriba representada con #.
Esto y otras cosas interesantes, las puedes encontrar en la guía de estilo de los foros.

Suerte :p y hasta pronto.
Saludos.

santana
19-03-2004, 01:42:54
Ah, como me he dado cuenta de que es tu primer mensaje en el foro, y por ser la primera vez que compilo un código con 25 errores y 0 warnings, te paso tu código con los errores eliminados y me permito alguna aclaración más.


#include <stdio.h>

int menu1 = 0;
int menucuenta = 0;
int menuretiro = 0;
int desiciont = 0;
int cantidad = 0;

void main(void)
{

printf ("Bienvenido al sistema ATH de Banco X\n");
printf ("Seleccione la transaccion que desea realizar\n");
printf ("1-Retiro de efectivo\t\t 2-Depositos\n");
printf ("3-Recepcion de pagos\t\t 4-Transferencias\n");
printf ("5-Solicitud chequera\t\t 6-Dinero al instante\n");
printf ("7-Consulta balances\n");

printf ("Elija su opcion:");
scanf ("%d", &menu1);
switch (menu1)
{
case 1 :
printf ("De que cta desea....");
printf ("1-C. corriente\t\t 2-C. ahorros\n");
scanf ("%d", &menucuenta);


switch (menucuenta)
{

case 1:
case 2:
printf ("Que cantidad....\n");
printf ("1-100\t\t 2-200\n");
printf ("3-300\t\t 4-500\n");
printf ("5-800\t\t 6-otra \n");
scanf ("%d",&menuretiro);

switch (menuretiro)
{

case 1:
case 2:
case 3:
case 4:
case 5:
printf ("Por favor espere...\n");
delay(4000);
printf ("Transaccion ...\n");
printf ("\n");
printf ("Desea....\n");
printf ("1-Si\t\t 2-no\n");
scanf ("%d", &desiciont);

switch (desiciont)
{
case 1 :
//goto inicio;
break;
case 2 :
//goto final;
break;
default :
printf ("error\n");
}//fin switch(decisiont)
break;
case 6 :
printf ("...cantidad \n");
scanf ("%d",&cantidad);
break;

default :
printf ("Error\n");
break;
}//fin switch(menuretiro)
break;


}//fin switch(menucuenta)

}//fin swith(menu1)

} //fin main()



Ahi tienes tu código tal como lo querías, se te olvidaba, por ejemplo, asignar el valor que recoges en el scanf poniendo el ampersand delante de la variable, y otra cosa, es que deberias evitar en la medida de lo posible el uso del goto, no es una forma muy elegante de programar, pero eso ya va a gustos de cada cual en los que no me meto, es solo un consejo.

Espero que sigas por aquí. Nos vemos.
Chao.

PD: He tenido que reeditar porque se me han ido las tabulaciones del código de onda, a ver si ahora han quedado bien.
SALU2 :)

megadanzig
19-03-2004, 13:54:23
:D de verdad gracias, es que el profesor de C empezo a escribir todo el codigo que daba en la pizarra y despues que me puse a probar, como la mitad de lo que dio no funcionaba! gracias por lo del goto, ya me lo habia dicho mi jefe en el trabajo, que no se debe usar porque " rompe la programacion estructurada". voy a ver como lo hago con condicionales para eliminarlo. ahora tengo la base, tengo que ponerme a terminar, eso es solo como la mitad:( gracias nuevamente!

megadanzig
19-03-2004, 14:44:34
...que forma o que condicionales crees que podria usar en este caso para evitar los goto , y que instruccion se utiliza para limpiar la pantalla? Gracias, saludos

Amilius
19-03-2004, 17:24:45
:D de verdad gracias, es que el profesor de C empezo a escribir todo el codigo que daba en la pizarra y despues que me puse a probar, como la mitad de lo que dio no funcionaba! gracias por lo del goto, ya me lo habia dicho mi jefe en el trabajo, que no se debe usar porque " rompe la programacion estructurada". voy a ver como lo hago con condicionales para eliminarlo. ahora tengo la base, tengo que ponerme a terminar, eso es solo como la mitad:( gracias nuevamente!
El "goto" sólo se utiliza para optimizar (si con su uso ahorramos uno o más saltos, especialmente los saltos condicionados) y como último recurso antes de bajar a lenguaje ensamblador, en la capa de software más baja (cercana al procesador) de la aplicación. Generalmente esta capa de software a su vez es utilizada por otra capa programada Orientada a Objetos y esta es la que finalmente terminamos utilizando. Como notarás a medida que subes de nivel y te alejas del procesador es más práctico usar métodos de programación más abstractos.

santana
19-03-2004, 19:14:14
Hola!!
Para evitar los goto, lo que deberías es tener el programa dividido en funciones, a las que puedas llamar desde cualquier punto del programa, esto hace el código de tu aplicación más comprensible y más fácil de mantener, no sé si tienes nociones de lo que es la cohesión, el acoplamiento, etc. A grandes rasgos, cada grupo de instrucciones que puedas ejecutar desde "fuera" de tu función, es conveniente implementarla en una función distinta. Ya sabes, programación estructurada....

Borrar pantalla.
Depende del compilador, me imagino que estarás con el Turbo C, entonces es:

clrscr();

En el Dev-Cpp, es así:

system("cls");

Saludos.

santana
19-03-2004, 19:26:48
Hola de nuevo.
Me ha faltado decirte, ya que probablemente no lo sepas, que la función clrscr() se encuentra en la biblioteca conio.h, por lo que tendrás que incluirla al principio del programa. Se trata de una biblioteca de Borland, no es estándar de C , aunque El Dev-cpp tiene una biblioteca también llamada conio que reemplaza a la de Borland, no contiene los prototipos para funciones como clrscr(), gotoxy () o cprintf().

Hasta pronto.l