Pregunta noob: ¿Pause o no pause? C++

Iniciado por Puntoinfinito, 23 Julio 2012, 00:04 AM

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

Puntoinfinito

Buenas a tod@s.

Veamos, estoy siguiendo los videotutoriales de Jesus Conde de programación C++. En sus VT trabaja en Microsoft Visual C++ 2006, algo antiguo... Pero ese no es el problema. Ese esta en que al compilar el siguiente código:

Código (cpp) [Seleccionar]
// videotutorial 2 - usar la palabra clave namespace
#include <iostream>
int main()
{
    using namespace std; // usamos namespace
/* Ejemplo de comentarios
multilínea. Podemos escribir
en varias líneas que no compilará
hasta que encuentre el símbolo de cierre
*/
 
    cout << "Hola ah\xd6.\n";
    cout << "\x90ste es un 5: " << 5 << "\n";
    cout << "El manipulador std::endl ";
    cout << "escribe una nueva l\xd6nea a la pantalla.";
    cout <<  endl;
    cout << "Aqu\xd6 vemos un n\xa3mero muy grande:\t" << 70000;
    cout <<  endl;
    cout << "\x90sta es la suma de 8 y 5:\t";
    cout << 8+5 << endl;
    cout << "\x90sta es una fracci\xa2n:\t\t";
    cout << (float) 5/8 << endl;
    cout << "y un n\xa3mero muy, muy grande:\t";
    cout << (double) 7000 * 7000 << endl;
    cout << "Aqu\xd6 puedes colocar";
    cout << "tu nombre...\n";
    cout << "\xadJuan Nadie es un programador C++!\n";
    return 0;
}


Y abrirlo una vez generado, le sale una terminal win32, con el código 100%  escrito correctamente, pero con un "pause" (en lo que sería batch) añadido. En cambio a mi, si lo ejecuto, se abre el código, se imprimen los caracteres y se cierra sin dejar tiempo para poder leer. Supongo que seria causa del malor int main() y tendré que guardar como variable y incorporarla dentro de main(...) .

O no, no se mucho de esto xD...

¡Ayuda expertos!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

DickGumshoe

#1
¡Hola!

Efectivamente, necesitas hacer una pausa. Si el creador de ese videotutorial compila directamente desde cmd, es normal que no le haga falta pausar el programa.

Una solución es poner getchar() al final del código.

Si has usado justo antes scanf() u otra función que deje basura en el buffer del teclado, necesitarás poner dos veces getchar(). Así, el primer getchar() eliminaría la basura del buffer y el segundo pedirá un carácter, pausando así el programa.

Una mala solución es poner system("pause"), incluido en stdlib.h. Este no es portable; solo funciona en Windows, por lo que no te aconsejo usarlo, a pesar de que es muy usado por internet.

Saludos!

rir3760

El problema se debe al IDE (entorno de desarrollo integrado) que estas utilizando. La gran mayoría de estos como Lcc-win32, Pelles C, CodeBlocks, Visual Studio, etc. generan esa pausa de forma automática, lo correcto ya que siendo estrictos no forma parte del programa.

Unos pocos IDEs (en este momento solo recuerdo a Dev-C++) no la generan. Para evitar llenar de pausas los programas (que para empezar no son necesarias) me parece mejor cambiar a otro.

Un saludo
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

DickGumshoe

#3
Esa pausa que tienen muchos IDEs están bien cuando siempre vas a ejecutar el programa directamente desde éste. Pero si lo que haces es ejecutar el .exe, la pausa no la genera, así que yo siempre uso getchar(), que sí hace la pausa en el .exe generado.

¡Saludos!

Puntoinfinito

Aja, pude resolverlo. La cuestión era poner :

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdio.h> //Añadir esta
int main()
{
...
getchar()
return 0;
}


Y si aparece en el .exe generado. Gracias

Saludos cracks
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

DickGumshoe

Si estás en C++ no te será necesario incluir stdio.h para usar getchar(), puedes poner cin.get(), que es el equivalente a getchar() en C++.

Saludos!

Puntoinfinito

Los dos de maravilla. ¡Anotados!

Gracias expertos, y saludos.
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Puntoinfinito

Expertos xD

Teóricamente esto ha de hacer pausa, pero ahora el compil no me hace caso...

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

int add(int uno,int dos)
{
using std::cout;
cout << "\nLa suma de " << uno << " y " << dos << " es ";
return (uno + dos);
}

int main()
{
using namespace std;
cout << "Ponga los dos numeros que quiere sumar\n";
int a,b,c;
cout << ">>> ";
cin >> a;
cout << "\n>>> ";
cin >> b;
c=add(a,b);
cout << c;
getchar();
return 0;
}


Lo he probado de poner a todos los sitios donde creo que se podría colocar... pero nain...
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

avesudra

¿Y si usas el "getchar" de C++?
Código (cpp) [Seleccionar]
cin.peek();
PD:No se seguro si es ese eh...Es que ahora mismo no puedo probarlo.
Regístrate en

rir3760

El problema es el siguiente, al pedir el numero tecleas:
123{ENTER}

Los caracteres "123" se toman para obtener el numero 123 pero el avance de linea '\n' se queda en el bufer de la entrada estándar. Cuando al final del programa llamas a la función "getchar" esta lee ese carácter, retorna de inmediato y el efecto es no tener la mentada pausa.

Por ello debes descartar el resto de la linea, en C++ hay varias opciones políticamente correctas, la mas sencilla es utilizando un bucle:
Código (cpp) [Seleccionar]
// Descartamos el resto de la linea
char ch;
while (cin.get(ch) && ch != '\n')
   ;
// Pausa mediante la lectura de un caracter
cin.get(ch);


Un saludo
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