[ Foro de Pascal ]

La ultima duda IMPORTANTE

10-Jan-2013 19:26
Antonio Rodrigues
5 Respuestas

begin
    repeat
          writeln('Aqui tienes el menu donde puedes empezar una cesta nueva, o modificar una ya existente.');
          writeln;
          writeln('   1. Mostrar nombres de cestas existentes.');
          writeln('   2. Abrir cesta de compra existente.');
          writeln('   3. Comenzar cesta de compra nueva.');
          writeln('   4. Mostrar cesta actual.');
          writeln('   5. Añadir producto a la cesta.');
          writeln('   6. Eliminar producto de la cesta.');
          writeln('   7. Modificar producto de la cesta.');
          writeln('   8. Guardar cesta.');
          writeln('   9. Cerrar cesta.');
          writeln('  10. Salir del programa.');

          writeln;

          write(' Elija una de las opciones anteriores: ');
          readln(opcion);
          clrscr;

          if (opcion='1') then
             fichero_ver_pedidos();

          if (opcion='2') then
             recupera_cesta(Nfichero);

          if (opcion='3') then
             comenzar_cesta();

          if (opcion='4') then
             begin
                  if (num_productos>0) then
                     ver_cesta()
                  else
                      ver_cesta2();
              clrscr;
              end;

          if (opcion='5') then
             begin
                  if (mi_cesta[0].en_cesta=false) then
                     anadir_prod();

                  if (mi_cesta[0].en_cesta=true) then
                     begin
                           write('Lo siento pero no se puede modificar este pedido debido a que ya se ha realizado.');
                           readln;
                      end;
             clrscr;
             end;

          if (opcion='6') then
              begin
                   if (mi_cesta[0].en_cesta=false) then
                      begin
                           if (num_productos>0) then
                              eliminar_prod()
                           else
                               eliminar_prod2();
                      end;

                   if (mi_cesta[0].en_cesta=true) then
                      begin
                           write('Lo siento pero no se puede modificar este pedido debido a que ya se ha realizado.');
                           readln;
                      end;
              clrscr;
              end;

          if (opcion='7') then
              begin
                   if (mi_cesta[0].en_cesta=false) then
                      begin
                           if (num_productos>0) then
                              modificar_prod()
                           else
                               modificar_prod2();
                      end;

                   if (mi_cesta[0].en_cesta=true) then
                      begin
                           write('Lo siento pero no se puede modificar este pedido debido a que ya se ha realizado.');
                           readln;
                      end;
              clrscr;
              end;

          if (opcion='8') then
             guarda_cesta(mi_cesta, Nfichero);

          if (opcion='9') then
             calcula_pedido(mi_cesta);

          num_productos:= 0;

          for i:=1 to tamxcesta do
              if (mi_cesta[i].en_cesta=true) then
                 num_productos:= num_productos+1;

    until (opcion='10');

readln;
end.

Lo que he dejado aqui es el modulo principal de mi programa. Lo que quiero es que me digais si veis algo que no esta bien, o si esta todo bien ??

Porque yo he repasado las cosas, pero no veo nada mal, pero siempre que ejecuto el programa y quiero salir del programa, se supone que le doy a la opcion 10 para salir, pero no se sale. Lo que hace es que se abre la opcion 1, es decir, si le doy a la opcion 10 (se supone que se tiene que salir del programa) en vez de salirse el programa se abre la opcion 1.

Alguien sabe porque pasa eso ?


10-Jan-2013 23:14
Lucas Matias Guardn

Antonio, como estas? Antes que nada yo, en mi caso, usuario un MIENTRAS y no un REPETIR, ya que puede poner la opción del MIENTRAS que se repita mientras la opción sea distinto de 10....
Segundo, me gustaría saber, la variable opcion, como la declaraste, como int o como char? Te pregunto esto porque en el código pones, por ejemplo, opción ='10'; es decir, pones comillas simples....si es char, te va a tomar el primer carácter solamente, que en este caso es el 1, te conviene declarar la variable como int.


11-Jan-2013 01:38
Antonio Rodrigues

La variable opcion la tengo como char. Pero gracias, ahora lo cambio por int.


11-Jan-2013 02:02
Luis Torres (+12)

Sí, seguramente declaraste la variable opcion como char y te toma unicamente el primer caracter de '10'. Eso lo puedes solucionar, también, declarandola como un string[2].
Saludos.


11-Jan-2013 13:24
Lucas Matias Guardn

Avisa si se soluciono con la ayuda que te dimos todos.....
Gracias...


11-Jan-2013 14:11
Antonio Rodrigues

Gracias por la ayuda. Me funciona con las 2 soluciones. Gracias.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)