Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ductum fusti percusit en 29 Marzo 2015, 22:04 pm



Título: system ("pause");
Publicado por: ductum fusti percusit en 29 Marzo 2015, 22:04 pm
Se puede hacer que al poner system ("pause"); dentro de un bucle anidado, haya que poner una palabra o letra específica para que continúe ejecutándolo?
Gracias.


Título: Re: system ("pause");
Publicado por: daryo en 29 Marzo 2015, 22:16 pm
podrias probar con getchar
http://www.cplusplus.com/reference/cstdio/getchar/


Título: Re: system ("pause");
Publicado por: ductum fusti percusit en 29 Marzo 2015, 22:37 pm
Se me olvido decir que era en c no en c++.


Título: Re: system ("pause");
Publicado por: daryo en 29 Marzo 2015, 22:43 pm
bueno si te refieres a evitar el enter y solo haga falta presional una tecla no se puede en c++/c estandar tendrias que usar una herramienta externa (ncurses,conio) o la api de windows .No se muy bien como se haria en linux.

hay muchos ejemplos en internet.


Título: Re: system ("pause");
Publicado por: mimel en 29 Marzo 2015, 22:43 pm
Amigo, acabo de encontrar la solución a eso, como en linux no recibe el system("pause"); entonces toca hacer un pequeño ciclo con el getchar y es el siguiente:

Código:
getchar();
while (getchar() != '\n' )
;
un programa mas sencillo donde lo ejecuta mejor:
Código:
#include <stdio.h>

int main(int argc, char *argv[]) {

int i;
for (i = 0; i < 3; i++)
{

printf("i = %d\n", i);
printf("Presione enter para continuar: ... ");

while ( getchar() != '\n')
;
}
printf("\n\n");
printf("Esto es todo!!\n");
printf("presiona enter para terminar!! (ironico, no es cierto?) ...");
while (getchar() != '\n')
;
printf("\n\n");
printf("esto es todo :D\n");

}

PERO en un programa mas complejo debes leer antes el getchar:
Código:
#include <stdio.h>

int main(int argc, char *argv[]) {

int valor_kilo,i,kilos,descuento,total,ganancias=0;
printf("Ingrese el valor por kilo de naranjas: ");
scanf("%d",&valor_kilo);

for(i=1;i<5;i++)
{
system("clear");
printf("=================CLIENTE %d=========================\n",i);
printf("Digite la cantidad de kilos de naranjas compradas: ");
scanf("%d",&kilos);
total=kilos * valor_kilo;
if(kilos >10)
{
descuento = total * 0.10;
total = total - descuento;
printf("El cliente compro: %d kilos.\nDescuento del 10(%) es de: %d.\nTotal a pagar: $%d\n\n",kilos,descuento,total);
}
else{
printf("El cliente compro: %d kilos.\nSin Descuento\nTotal a pagar: $%d\n\n",kilos,total);
}

ganancias = ganancias + total;
printf("Presione una tecla para continuar: ...");
getchar();/*Aca lees el enter*/
while (getchar() != '\n' )
;

}
system("clear");
printf("========================================================\n");
printf("las ganancias que recibio la tienda es de: $%d pesos",ganancias);

}

Espero que hallas entendido!


Título: Re: system ("pause");
Publicado por: sabeeee en 30 Marzo 2015, 00:52 am
Sinceramente yo usaría solamente "getchar()" no se necesita mucho mas que eso. en C y  C++.


Título: Re: system ("pause");
Publicado por: rir3760 en 30 Marzo 2015, 04:42 am
Se puede hacer que al poner system ("pause"); dentro de un bucle anidado, haya que poner una palabra o letra específica para que continúe ejecutándolo?
No ya que el comando "pause" solo requiere de la pulsación de una tecla, nada mas.

La operación la tienes que realizar de forma manual:
1) Indicas al usuario que debe introducir un determinado carácter o palabra para continuar.
2) Lees la entrada del usuario.
3) Verificas si es la correcta o no.

Si se trata de un solo carácter puedes leer este con la función getchar, en el caso de una palabra con scanf. Para verificar la entrada si es un carácter simplemente utilizas el operador de comparación "==" mientras en el caso de una palabra utilizas la función strcmp.

Un saludo


Título: Re: system ("pause");
Publicado por: NOIS en 30 Marzo 2015, 10:25 am
Si quieres que se introduzca una palabra o cadena concreta puedes hacer algo muy sencillo:

Código
  1.  
  2. string str;
  3.  
  4. cout << "Introduzca la clave para continuar: " << endl;
  5. while(str != "clave")
  6. {
  7.     getline(cin, str);
  8. }
  9.  
  10.  


Título: Re: system ("pause");
Publicado por: ductum fusti percusit en 30 Marzo 2015, 21:20 pm
Muchas gracias a todos ya lo he arreglado, es que no de la función getchar. ;D