Autor
|
Tema: Pregunta noob: ¿Pause o no pause? C++ (Leído 10,859 veces)
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
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: // 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!
|
|
|
En línea
|
|
|
|
DickGumshoe
|
¡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!
|
|
« Última modificación: 23 Julio 2012, 00:16 am por DickGumshoe »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
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
|
|
|
DickGumshoe
|
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!
|
|
« Última modificación: 23 Julio 2012, 14:13 pm por DickGumshoe »
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Aja, pude resolverlo. La cuestión era poner : #include <iostream> #include <stdio.h> //Añadir esta int main() { ... getchar() return 0; }
Y si aparece en el .exe generado. Gracias Saludos cracks
|
|
|
En línea
|
|
|
|
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!
|
|
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Los dos de maravilla. ¡Anotados!
Gracias expertos, y saludos.
|
|
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Expertos xD Teóricamente esto ha de hacer pausa, pero ahora el compil no me hace caso... #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...
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
¿Y si usas el "getchar" de C++? cin.peek();
PD:No se seguro si es ese eh...Es que ahora mismo no puedo probarlo.
|
|
|
En línea
|
Regístrate en
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El problema es el siguiente, al pedir el numero tecleas: 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: // 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
|
|
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Animación con sonidos y botones de play, stop y pause
Diseño Gráfico
|
daam
|
1
|
2,532
|
15 Octubre 2007, 18:41 pm
por Azielito
|
|
|
como puedo meter mas de un pause?
Scripting
|
faralito
|
3
|
3,010
|
20 Noviembre 2008, 19:22 pm
por faralito
|
|
|
Comportamiento inesperado [FOR+PAUSE]
Scripting
|
leogtz
|
5
|
4,142
|
29 Diciembre 2008, 20:55 pm
por sirdarckcat
|
|
|
Ejecutar programas en Windows sin necesidad de pausas (system (pause) etc)
Programación C/C++
|
Akai
|
2
|
4,768
|
16 Octubre 2010, 19:18 pm
por flony
|
|
|
W7 ¿cómo desactivar todo lo que pause una descarga?
Windows
|
Tachikomaia
|
3
|
4,371
|
11 Octubre 2023, 23:53 pm
por Tachikomaia
|
|