Iniciandome en programación C++

21 posts / 0 nuevo(s)
Ir al último post
Imagen de Apolusdie
Apolusdie
Desconectado
Poblador desde: 26/01/2009
Puntos: 406

Hola a todos. Hace poco que me he metido en esto de los lenguajes de programación y ahora estoy trabajando con Dev-C++. Tengo un problema y es que después de haber escrito un programa para sumar dos números y compilarlo, lo corro, le introduzco el primer número, doy a enter, le doy el segundo número, le doy a enter, y se acaba el programa.

No sé si es que le falta algo al programa fuente o yo qué sé.

Un Saludo.

PD. bachdrei alludame!!!

Imagen de Jesucristo
Jesucristo
Desconectado
Poblador desde: 30/01/2009
Puntos: 877

Eso es porque bajo Windows hay compiladores de C/C++ que no se pausan cuando "corren" un programa. Bueno, ahora no sabría muy bien cómo explicarlo.

Para solucionarlo, si mal no recuerdo, justo antes de la última línea de código fuente de la función main hay que poner system("PAUSE") o getch(). Es decir:

int main(){
/*Aquí va todo el código/*
/*blablabla/*
getch();
return 0;
}

No recuerdo si lo de getch() funcionaba sólo para C o si también lo aceptaba C++. El system("PAUSE") funciona para los dos seguro.

Imagen de Richard
Richard
Desconectado
Poblador desde: 30/01/2009
Puntos: 116

"Hola a todos. Hace poco que me he metido en esto de los lenguajes de programación y ahora estoy trabajando con Dev-C++. Tengo un problema y es que después de haber escrito un programa para sumar dos números y compilarlo, lo corro, le introduzco el primer número, doy a enter, le doy el segundo número, le doy a enter, y se acaba el programa.

No sé si es que le falta algo al programa fuente o yo qué sé."

Lo mas probable es que hayas ejecutado tu programa desde Windows.
Lo que sucede es que el programa termina inmediatamente despues de haber aceptado el ultimo valor que ingresaste y mostrar el resultado en pantalla. El problema es que el resultado se muestra e inmediatamente la ventana se cierra, impidiendote ver el resultado.
Ese problema no lo tienes si ejecutas la aplicacion desde la consola.

Hay muchas formas de solucionar esto. Un par de ellas ya fueron explicadas en el post anterior.
Prueba esas soluciones y luego cuentanos si funcionaron.

Bye

Richard

Imagen de Apolusdie
Apolusdie
Desconectado
Poblador desde: 26/01/2009
Puntos: 406

Pues sigo sin poder hacerlo. Os copio el archivo fuente:

#include
int num1, num2, suma
{
printf("Primer numero: ");
scanf("%d",&num1);
printf("Segundo numero: ");
scanf("%d",&num2);
suma=num1+num2;
printf("La suma de %d y %d es %d", num1, num2, suma);
system("PAUSE");
return 0;
}

Imagen de Richard
Richard
Desconectado
Poblador desde: 30/01/2009
Puntos: 116

Has incluido el stdlib.h??
Si no me equivoco, esa es la biblioteca que necesitas para usar el system("pause").

Imagen de Jesucristo
Jesucristo
Desconectado
Poblador desde: 30/01/2009
Puntos: 877

¿Seguro que lo has copiado bien? A mí me faltan muchas cosas al principio... ¿#include qué? (edito: vale, ha sido la página que se ha tragado el resto) La definición de la función principal ( int main(){ ) no la veo, y falta un punto y coma en la línea donde declaras las variables. Además, las variables las declaras al principio como enteros (int) pero luego utilizas el "%d" para referirte a ellas en vez del "%i". El %i es para los enteros (int, lo que tú has declarado) y los %d para los double.

Copia y pega esto (sin los espacios que hay después del include, donde están las librerías):

#include < stdio.h >
#include < stdlib.h >

int main(){
int num1, num2, suma;
printf("Primer numero: ");
scanf("%i",&num1);
printf("Segundo numero: ");
scanf("%i",&num2);
suma=num1+num2;
printf("La suma de %i y %i es %i", num1, num2, suma);
system("PAUSE");
return 0;
}

Así ya debería de funcionarte. Aunque me extraña que hayas podido compilar el programa sin que te saltara un syntax error.

Imagen de Jesucristo
Jesucristo
Desconectado
Poblador desde: 30/01/2009
Puntos: 877

Bueno, y en el caso de que siguiera cerrándosete la pantalla (sería raro) puedes hacer lo que ha dicho Richard, que es ejecutar el programa desde la misma consola. Ya sabes, abres el DOS (Inicio/ejecutar/cmd) buscas el directorio donde tienes guardado el programa y lo ejecutas.

PD: Por si acaso aquí va un ejemplo. Abres el DOS y haces esto:

c:\> cd carpeta1
c:\carpeta1> cd carpeta2
c:\carpeta1\carpeta2\> programa.c

Primer número: 3
Segundo número: 5
La suma de 3 y 5 es 8

-----------
Se sobreentiende que donde he puesto carpeta1 y carpeta2 tienes que poner la carpetas donde tienes guardado el programa, de la más general (Mis documentos, Escritorio, o la que sea) hasta la más concreta.

Imagen de Apolusdie
Apolusdie
Desconectado
Poblador desde: 26/01/2009
Puntos: 406

Bien, ya me va. Lo que creo que era el error era el no añadir el #include < stdlib.h >, porque aunque tenía las variables como %d, me salía el resultado pero en fracciones de segundo la consola se cerraba.

Muchas gracias.

Imagen de Richard
Richard
Desconectado
Poblador desde: 30/01/2009
Puntos: 116

Problema resuelto. Enhorabuena. :-)
Saludos.

Imagen de kawaku
kawaku
Desconectado
Poblador desde: 25/01/2009
Puntos: 2791

Se impone la posibilidad de poner código en el editor...

¡Me tomo nota!

Imagen de BatchDrake
BatchDrake (no verificado)

Los niños que acaban sus programas con system ("PAUSE") no van al cielo.

Consejo dado por #4876342 vez.

Imagen de BatchDrake
BatchDrake (no verificado)

¿Por qué? Por esto:

$ ./programa
Primer numero: 4
Segundo numero: 2
sh: PAUSE: command not found
La suma de 4 y 2 es 6

Imagen de Richard
Richard
Desconectado
Poblador desde: 30/01/2009
Puntos: 116

"Los niños que acaban sus programas con system ("PAUSE") no van al cielo."

Juas, juas, juas :-D
Cierto. Creo que no he visto un solo sitio de programacion en C/C++ que no diga eso. Juas.

Lo que pasa es que el system("pause") es adictivo :-)
Usualmente solo lo usan las personas que estan programando algo rapido o se inician en la programacion en estos lenguajes.

Imagen de BatchDrake
BatchDrake (no verificado)

Pues sí, Richard.

De todas formas, es un vicio que no entiendo. Porque getchar () es más corto, más fácil de escribir y más rápido que system ("pause"). Es una de esas malas manías que por alguna insondable razón crean escuela. Es extañísimo.

Imagen de Richard
Richard
Desconectado
Poblador desde: 30/01/2009
Puntos: 116

Habia visto una pagina que le dedico unas cuantas lineas a mostrar el porque era mejor usar getchar() y mandaba un tiron de orejas a todos los que usaban system("pause").

Quieres leer algo malo? Conozco cierta universidad (aunque deberia decir "ciertas") que enseñan a sus alumnos este y otros "vicios" y para colmo lo hacen como si fuera la solucion mas optima.

Algunas veces la culpa no es del programador, sino de quien le enseño.

En fin... a seguir aprendiendo y a seguir programando...

Imagen de Apolusdie
Apolusdie
Desconectado
Poblador desde: 26/01/2009
Puntos: 406

Pues sí, Richard.

De todas formas, es un vicio que no entiendo. Porque getchar () es más corto, más fácil de escribir y más rápido que system ("pause"). Es una de esas malas manías que por alguna insondable razón crean escuela. Es extañísimo.

 

El problema es que si pongo getchar () se me vuelve a cerrar el programa sin darme antes el resultado.

Imagen de BatchDrake
BatchDrake (no verificado)

Maldito MS-DOS. Seguramente se haya quedado algo en el buffer. Prueba usando getch ().

O mejor, incluso:

printf ("Pulse ENTER para continuar . . .");
while (getch () != '\n');

Así, un while sin cuerpo, que se quede esperando a que pulses enter en vez de una tecla cualquiera.

Imagen de CrippledLucifer
CrippledLucifer
Desconectado
Poblador desde: 26/01/2009
Puntos: 1175

Buenas, siento ésta necromancia de post pero yo también estoy iniciándome en la programación en C++ (estoy en primer año de ingeniería) y me ha llamado la atención lo del system("pause") y el getchar(), porque en mis ejercicios siempre uso el primero (tal y como me han enseñado, vaya) y desconocía que existía otra forma mejor de hacer lo mismo. ¿Podríais explicarme por qué es mejor usar el getchar?

Saludos y gracias por adelantado

Do you really believe in the system? Well O.K.

Imagen de kawaku
kawaku
Desconectado
Poblador desde: 25/01/2009
Puntos: 2791

Yo estudié C y jamás vi la llamada a system("pause")... Me imagino que BatchDrake lo condena por ser un comando específico de MS-DOS, y por tanto, no portable a entornos Unix, por ejemplo.

Imagen de Jesucristo
Jesucristo
Desconectado
Poblador desde: 30/01/2009
Puntos: 877

Ahora que lo decís, cuando empecé con C mis profesores también me dijeron que usara el system pause los hijosdeputa 

Imagen de BatchDrake
BatchDrake (no verificado)

Vale, he perdido todo lo que he estado escribiendo, a tomar por culo.

Bueno, en resumen. getchar () devuelve el primer byte en el buffer de stdin. Si el buffer está vacío, lo carga con caracteres que le lleguen del teclado hasta encontrar un enter, y vuelve a intentar devolver el primero de ellos.

system lo que hace es bifurcar un proceso creando un hijo, ese hijo luego es chapado por una llamada a execve o similar, la cual carga la shell en memoria, interpreta el comando, espera a que leas del teclado, vuelve, sale, se pone zombie y el proceso padre que estaba esperando a que el hijo terminase, recibe una señal SIGCHLD y waitpid devuelve el valor de salida (el que metemos en exit (int)) entre otras cosas. El proceso hijo finalmente desaparece y ese valor es finalmente lo que te devuelve system.

 OcioZero · Condiciones de uso