Duda

Iniciado por djdac3, 22 Septiembre 2012, 20:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Caster

He leido eso y no he podido evitar contestar, nunca useis system("PAUSE"), repito nunca, es llamar al sistema para hacer una pausa, como consejo es mejor que eviteis esa pausa, echadle un vistazo a las chinchetas, hay un post que habla sobre esto.

Stakewinner00

una pregunta, es que como yo aprendo por mi cuenta sin uni pues hay cosas que me salto para que sirve los ;; de

for(;;)

gracias

PD:
Cita de: Caster en 22 Septiembre 2012, 21:34 PM
He leido eso y no he podido evitar contestar, nunca useis system("PAUSE"), repito nunca, es llamar al sistema para hacer una pausa, como consejo es mejor que eviteis esa pausa, echadle un vistazo a las chinchetas, hay un post que habla sobre esto.

por que no se tenia que usar? creo que era por que hacia correr al programa lento y tenia menos compatibilidad

djdac3

el system("PAUSE"); es el ultimo recurso, ya que probé con cin.peek, cin.ignore, get.char, ninguno me sirvió y no se porque.

los ;; en el for es para que sea un ciclo infinito

cpu2

Hola

Cita de: djdac3 en 22 Septiembre 2012, 21:36 PM
el system("PAUSE"); es el ultimo recurso, ya que probé con cin.peek, cin.ignore, get.char, ninguno me sirvió y no se porque.

los ;; en el for es para que sea un ciclo infinito

No programo en C++ ni en Windows, para hacer una pausa o "bloquear" la ejecución tienes la función sleep, el tiempo se define en segundos.

Un saludo

P.D: Yo no pondria un for, lo dejaria así:

while (1) {

//codigo

}

DickGumshoe

No se pausa porque con
Código (cpp) [Seleccionar]
cin>>mesa; dejas "basura" en el buffer del teclado, y
Código (cpp) [Seleccionar]
cin.peek(); en este caso lo que hace es limpiar dicho buffer. Para solucionarlo, solo tienes que poner dos veces
Código (cpp) [Seleccionar]
cin.peek(); (u otro similar). El primero limpiará el buffer, y el segundo pausará el programa.

Un saludo.

Caster

Prueba con este:

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>


using namespace std;

int main()
{
    int mesa;
    for(;;){
        cout<<"Ingrese el mes actual"<<endl;
        cin>>mesa;
        if(mesa>=1 && mesa<=12) break;
            else{
                cout<<"El mes que ingreso no es valido, inrese un dato valido"<<endl;
               cout<<"Presione enter para continuar"<<endl;
               cin.get();
               cin.get();

system("cls");
            }
        }
   
  cin.get();

    return 0;
}

fary

Cita de: cpu2 en 22 Septiembre 2012, 22:50 PM
Hola

No programo en C++ ni en Windows, para hacer una pausa o "bloquear" la ejecución tienes la función sleep, el tiempo se define en segundos.

Un saludo

P.D: Yo no pondria un for, lo dejaria así:

while (1) {

//codigo

}


En code::blocks (y me supongo que mas compiladores) da lo mismo poner una cosa que otra porque genera el mismo código ensamblador:

Con while:

Código (asm) [Seleccionar]

MOV DWORD PTR SS:[ESP+C],0
MOV DWORD PTR SS:[ESP+8],0
MOV DWORD PTR SS:[ESP+4],0
MOV DWORD PTR SS:[ESP],0
CALL <JMP.&USER32.MessageBoxA>
SUB ESP,10
JMP SHORT bucle_wh.0040132E



Con for:

Código (asm) [Seleccionar]

MOV DWORD PTR SS:[ESP+C],0
MOV DWORD PTR SS:[ESP+8],0
MOV DWORD PTR SS:[ESP+4],0
MOV DWORD PTR SS:[ESP],0
CALL <JMP.&USER32.MessageBoxA>
SUB ESP,10
JMP SHORT bucle_wh.0040132E


El equivalente en C

While:

#include <windows.h>

int main()
{
    while(1)
    {
        MessageBoxA(0,0,0,0);
    }

    return 0;
}


for:

#include <windows.h>

int main()
{
    for (;;)
    {
        MessageBoxA(0,0,0,0);
    }

    return 0;
}


saludos!
Un byte a la izquierda.

cpu2

Hola mDrinky, gracias por el dato, esto me viene bien por que estoy empezando con ASM.

Solo dije eso porque for se suele utiliza para bucles definidos, ya sabes iniciación de la variable, condición, incremento o decremento, por eso me parecio más correcto para un bucle infinito usar while. Como genera lo mismo ya veo que no es importante.

P.D: GCC me genero exactamente lo mismo.

Un saludo

fary

Cita de: cpu2 en 23 Septiembre 2012, 16:25 PM
Hola mDrinky, gracias por el dato, esto me viene bien por que estoy empezando con ASM.

Solo dije eso porque for se suele utiliza para bucles definidos, ya sabes iniciación de la variable, condición, incremento o decremento, por eso me parecio más correcto para un bucle infinito usar while. Como genera lo mismo ya veo que no es importante.

P.D: GCC me genero exactamente lo mismo.

Un saludo

Sí, en realidad casi nadie en C usaría un for para hacer un bucle infinito. De hecho queda asta feo, no?. Pero cosas como estas demuestran que no siempre un código bonito en C pueda funcionar mejor que un código feo  :D

un saludo!
Un byte a la izquierda.