dudas sobre el uso pause(); y exit(); en lenguaje C. [Solucionado]

Hola amigos.

Tengo problemas al intentar crear una pausa en un programa en C usando gcc version 4.3.2 (Debian 4.3.2-1.1) mientras se ejecuta. Puedo hacerlo poniendo pause(); pero quiero poner tambień un mensaje antes que ponga "pulse una tecla para continuar" o sea.

printf ("pulse una tecla para continuar\n");
pause();

En este caso el programa para su ejecución pero al pulsar una tecla no sigue funcionando.

También tengo entendido system ("pause"); funciona en windows pero no en linux y que getch() da problemas . A mí tanto una como otra no funcionan durante la ejecución de mi programa

También quiero saber si existe alguna manera de salir de un programa mediante el uso de algún comando. porque uso exit(); y el programa no sale.No sé si necesito alguna directiva tipo #include

Estoy siguiendo un curso de lenguaje C muy bueno de elrincondelc. Está hecho para windows como para linux y ya advierte que los programas no se pueden compilar igual.

Gracias por anticipado.

¿scanf? man 2 scanf

Para lo de exit, man 2 exit

PD. Estos apuntes estaban bastante bien, http://marmota.act.uji.es/MTP/pdf/c.pdf

Buenas!

No se si te habre entendido bien, pero respecto al uso de la funcion pause();, creo que has de saber que esta funcion bloquea el proceso en ejecucion hasta que recibe una señal cualquiera (si no has manipulado las mascaras de señales). Prueba a enviar desde otra consola una señal, por ejemplo SIGUSR1 (que no hara nada) y veras como continua el programa (kill -SIGUSR1 [pid_del_proceso]). Por eso, por muchas teclas que pulses, si no envias una señal este seguira bloqueado.
No se que tipo de curso estaras siguiendo, pero el uso de la funcion pause() es utilizada mas que nada para la sincronizacion de procesos y demas. Algo que creo se escapa al proposito del programa que quieres hacer.

En el manual de pause veras tambien que debes incluir la libreria en la cabecera de tu programa.

El uso de exit() es como usar return(), solo que podras utilizar la funcion atexit para ejecutar alguna accion justo antes de finalizar el programa. Leete el man de exit y _exit.

Si lo que quieres es que el programa te muestre el mensaje con printf y continue al pulsar una tecla, basta con utilizar getch() como dices (incluido en curses.h). Leete el man para saber como utilizar correctamente esta funcion.

Espero haberte sido de alguna utilidad. Un saludete!!!

Bueno lo he solucionado definiendo una variable tipo caracter a la que llamé 'c'.

char c;

He puesto un scanf y despues el getchar(); //De esta forma el programa se para. He decidido prescindir de exit por su escasa utilidad.

printf ("Fin del programa, presione una tecla para ver los cŕeditos\n");
scanf ("%c",&c);
getchar();

Como obsequio a vuestra inestimable ayuda os dejo el programita que he creado. Estoy aprendiendo, no es el kernel de linux pero tiempo al tiempo.

//programa que sirve para saber el código de resistencias de una resistencia una vez introducido, el primer dígito,elsegundo dígito, el multiplicador de la resistencia y el valor de la tolerancia.
//colores de las resistencias

//        0.- Negro 
//   1.- Marrón
//   2.- Rojo
//   3.- Naranja
//   4.- Amarillo
//   5.- Verde
//   6.- Azul
//   7.- Morado
//   8.- Gris
//   9.- Blanco

#include <stdio.h>

int main ()

{
int num1,num2,multiplicador,tolerancia;
char c;

printf ("Este programa indica los colores de izquierda de la resistencia e izquierda a derecha\n");
printf ("introduciendo El primer dígito, El segundo dígito, el multiplicador de los valores de la resistencia\n");
printf ("también calcula la tolerancia introduciedo solamente su valor númerico\n");
printf ("\n");
printf ("Escribe el primer dígito del valor de la resistencia\n");
scanf ("%i",&num1);
printf ("Escribe el segundo dígito del valor de la resistencia\n");
scanf ("%i",&num2);
system ("clear");
printf ("Siguiendo los 3 ejemplos que aparecen abajo\n");
printf ("\n");
printf ("Ejemplo 1: El el caso de una resistencia de 100 ohmios; el número de ceros del multiplicador sería 1\n");
printf ("Ejemplo 2: En el caso de una resistencia de 11 ohmios; el número de ceros del multiplicador sería 0\n");
printf ("Ejemplo 3: En el caso de una resistencia de 0.11 ohmios;el número de ceros del multiplicador  sería -2\n");
printf ("\n");
printf ("Ahora escribe el número de ceros del multiplicador\n");
scanf ("%i",&multiplicador);
system ("clear");
printf ("Escribe el valor de la tolerancia sin poner el símbolo de '%' delante\n");
scanf ("%i",&tolerancia);
system ("clear");
printf ("\n");
printf ("\n");
switch (num1)
{
case 0:
printf ("El código de colores de la resistencia es: negro,");
break;
case 1:
printf ("El código de colores de la resistencia es:marrón,");
break;
case 2:
printf ("El código de colores de la resistencia es:rojo,");
break;
case 3:
printf ("El código de colores de la resistencia es:naranja,");
break;
case 4:
printf ("El código de colores de la resistencia es:amarillo,");
break;
case 5:
printf ("El código de colores de la resistencia es:verde,");
break;
case 6:
printf ("El código de colores de la resistencia es:azul,");
break;
case 7:
printf ("El código de colores de la resistencia es:morado,");
break;
case 8:
printf ("El código de colores de la resistencia es:gris,");
break;
case 9:
printf ("El código de colores de la resistencia es:blanco,");
break;
default:
printf ( "error," );
}

switch (num2)
{
case 0:
printf ("negro,");
break;
case 1:
printf ("marrón,");
break;
case 2:
printf ("rojo,");
break;
case 3:
printf ("naranja,");
break;
case 4:
printf ("amarillo,");
break;
case 5:
printf ("verde,");
break;
case 6:
printf ("azul,");
break;
case 7:
printf ("morado,");
break;
case 8:
printf ("gris,");
break;
case 9:
printf ("blanco,");
break;
default:
printf ( "error," );
}

if (multiplicador < -2 || multiplicador > 9)
{
printf ("error,");
}
else if (multiplicador == -2)
{
printf ("plata,");
}
else if (multiplicador == -1)
{
printf ("oro,");
}
else if (multiplicador == 0 )
{
printf ("negro,");
}
else if (multiplicador == 1)
{
printf ("marrón,");
}
else if (multiplicador == 2)
{
printf ("rojo,");
}
else if (multiplicador == 3)
{
printf ("naranja,");
}
else if (multiplicador == 4)
{
printf ("amarillo,");
}
else if (multiplicador == 5)
{
printf ("verde,");
}
else if (multiplicador == 6)
{
printf ("azul,");
}
else if (multiplicador == 7)
{
printf ("morado,");
}
else if (multiplicador == 8)
{
printf ("gris,");
}
else if (multiplicador == 9)
{
printf ("blanco,");
}
switch (tolerancia)
{
case 1:
printf ("marrón\n");
break;
case 2:
printf ("rojo\n");
break;
case 5:
printf ("oro\n");
break;
case 10:
printf ("plata\n");
break;
case 20:
printf ("sin tolerancia\n");
break;
default:
printf ("error\n");
}
printf ("\n");
printf ("Fin del programa, presione una tecla para ver los cŕeditos\n");
scanf ("%c",&c);
getchar();
printf ("\n");
printf ("Programa creado por franky32. Doy licencia para su modificación y distribución libre y gratuita\n");
printf ("\n");
printf ("Muchas gracias a Minaya,PeterSan,firulillo y a la comunidad esdebian,\n");
printf ("\n");

return 0;
}

Saludos a todos.