Programación General > C/C++
Rellenar vector sin repetir
Gussr78:
Gracias por vuestras respuestas.
En cuanto a usar getchar(), no se por que puede ser que no me lo ejecuta, se cierra el programa y ya está. No se si es que me falta algo mas que poner.
En fin, gracias.
LapizTolita:
Quiza te queda lleno el buffer te doy 2 opciones
Alternativa windows
--- Código: C++ ---#include <windows.h>#define PAUSA printf("nPulse enter para continuar"); getch();int getch(void){ int caracter; DWORD leidos, modo; GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo); SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT); ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &caracter, 1, &leidos, NULL); SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo); return caracter;}
O podes usar la misma macro pero llamando a esta función para limpiar el buffer que es mas portable, además te va a servir para otros momentos que necesites vaciar el buffer del teclado.
--- Código: C++ --- #include <unistd.h>#include <errno.h>#include <fcntl.h>#define PAUSA printf("nPulse enter para continuar"); stdin_flush(); getchar();int stdin_flush(){ char buf[64]; unsigned int bytes_read; char flag; flag = fcntl(0, F_SETFL, O_NONBLOCK); if(flag == -1){ return flag; } while(1){ bytes_read = read(0, buf, sizeof(buf)); if(bytes_read == 0){ flag = fcntl(0, F_SETFL, O_SYNC); return flag; } if(bytes_read == -1){ if(errno = EWOULDBLOCK){ fcntl(0, F_SETFL, O_SYNC); return flag; } write(2, "Error #%d while reading stdinn", errno); flag = fcntl(0, F_SETFL, O_SYNC); return -1; } }}
Podrías usar fflush(stdin); pero también podrías freír huevos con aceite del auto :rolleyes:
m0skit0:
Le complicas la vida demasiado al chaval sólo por algo insignificante como que no se cierre la ventanita :ph34r: Y encima le dices que no es portable, pero le plantas un getchar() con WinAPIs :P
Eso de cerrarse la ventana es simplemente porque lo lanzas desde el IDE en una ventana externa. Si abres un terminal Windows y lanzas el programa verás que no se cierra (o si usas otro IDE que tenga consola integrada, por ejemplo Eclipse, tampoco lo necesitas). Es algo que no tiene relevancia ni importancia, realmente, como para estar dándole tantas vueltas.
Saludos
LapizTolita:
Bueno veo que te molesto que un random como yo te de sugerencias sobre como programar, te juro que cuando postie lo de la portabilidad era para darle al pibe ese una sugerencia que a mi me habían dado (si soy algo nuevo en esto de la programación)
Otra cosa no sé porque decís que
--- Cita de: "m0skit0" ---Y encima le dices que no es portable, pero le plantas un getchar() con WinAPIs :P
--- Fin de la cita ---
Siendo que ahí aclaro que esa es la alternativa Windows y por eso le doy 2 alternativas. Capaz que si hubieras leido por lo menos lo que escribí antes de responderme te hubieras dado cuenta de que la función que esta implementada con WinAPIs es getch() que por cierto en el único lugar que es "nativa" es en borland, y que puse:
--- Cita de: "lapiztolita" --- O podes usar la misma macro pero llamando a esta función para limpiar el buffer que es mas portable, además te va a servir para otros momentos que necesites vaciar el buffer del teclado.
--- Fin de la cita ---
Ahí claramente expreso que podes usar la misma macro, oh wait!! si era "mas portable" como usar el getch() implementado con WinAPIs ? claro está que es un getchar(); pero bueno de esos detalles se dan cuenta los que leen por lo menos una vez el post.
Además yo pruebo todo lo que le digo no escribo porque si nada más, si dije que era más portable fue porque lo probé en ubuntu también.
m0skit0:
--- Cita de: "LapizTolita" ---Bueno veo que te molesto que un random como yo te de sugerencias sobre como programar
--- Fin de la cita ---
:huh: :lol: :P
Navegación
[*] Página Anterior
Ir a la versión completa