hacer clave con * cuando se ingresa la misma

Iniciado por neo_from_cs_matrix, 21 Agosto 2011, 17:58 PM

0 Miembros y 1 Visitante están viendo este tema.

neo_from_cs_matrix

estoy en un programa de consola, necesito ingresar usuario y clave, pero quiero que la clave sea con hasteriscos asi *****
no se me ocurre mucho, manipular el cin? eso se me habia ocurrido si pero no se bien como hacerlo, me pueden ayudar a hacerlo .. solo necesito esa parte de la conversion a *, lo del ingreso eso no me referia  :xD

rir3760

Supongo el lenguaje de programación es C++, ¿Correcto?

No es posible utilizando solo la biblioteca estándar de C++, vas a tener que utilizar bien el API que exponga el SO (por ejemplo Win32 en MS Windows) o una biblioteca de terceros (por ejemplo ncurses en Linux).

Un saludo
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

neo_from_cs_matrix

no haber yo encontre eso recien

http://www.daniweb.com/software-development/cpp/threads/32798
http://www.cplusplus.com/forum/general/3766/
http://ph.answers.yahoo.com/question/index?qid=20100928041720AAOyJGd
http://answers.yahoo.com/question/index?qid=20091022163828AAGxeYE

pero eso usa la biblioteca conio, pero quiero hacerlo con cin, osea el ingreso de la clave que sea con cin y entonces lo que necesito es modificar el cin para que cambie todas las letras o numeros que ingreso a hasteriscos, pero internamente guarda los valores reales para compararlos con la clave que esta wardada.
por eso necesito hacerlo con cin, quisiera que alguien me explicara como se hace, osea la parte de modificar el cin para que cambie a hasteriscos
gracias



El_Java

el problema de lo que quieres hacer es que el texto que se ingresa en la consola no se ingresa realmente en el buffer del cin hasta que no pulsas enter, asi te da la opcion de borrar si te equivocas, por lo que no se puede sincronizar el poner una letra y que salga el asterisco, otra cosa es que uses librerias graficas como Qt, que te dan la opcion de aplicar un cambio cuando se pulsa una letra y se ponga el * en la caja del texto.
No se si me he explicado bien, alguna duda ya sabes
Un saludo.

тαптяα

Cita de: rir3760 en 21 Agosto 2011, 18:39 PM
Supongo el lenguaje de programación es C++, ¿Correcto?

No es posible utilizando solo la biblioteca estándar de C++, vas a tener que utilizar bien el API que exponga el SO (por ejemplo Win32 en MS Windows) o una biblioteca de terceros (por ejemplo ncurses en Linux).

Un saludo
Esto te servirá:

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <conio.h>

int main()
{
   using std::cout;
   using std::endl;
   using std::cin;
   using std::string;

   const unsigned short len = 12; //aqui pones la longitud de la cadena de texto
   string letra;
   string respuesta = "Access:";
   string texto = "************";
   int j;

   //PROGRAMA
   cout << "cPanel Login Access" << endl <<"Pass: ";
   for(int i = 1; i <= len; i++)
   {
           letra = getch();
           if(letra == "_")
           {
                    break;
           }

           respuesta.insert(i+6, letra);
           cout << texto.substr(i-1, 1);
   }
   cin >> j;
   cout << endl << endl << respuesta << endl << endl << endl;
   system("pause");
   return 0;
}

neo_from_cs_matrix

Cita de: El_Java en 21 Agosto 2011, 19:05 PM
el problema de lo que quieres hacer es que el texto que se ingresa en la consola no se ingresa realmente en el buffer del cin hasta que no pulsas enter, asi te da la opcion de borrar si te equivocas, por lo que no se puede sincronizar el poner una letra y que salga el asterisco, otra cosa es que uses librerias graficas como Qt, que te dan la opcion de aplicar un cambio cuando se pulsa una letra y se ponga el * en la caja del texto.
No se si me he explicado bien, alguna duda ya sabes
Un saludo.

ah ahora entiendo porque no sirve esto, porque el cin trabaja con el buffer istream, y este no tiene nada hasta que no se presiona enter, es eso cierto ?
entonces si yo sobrecargo cin eso no ayudaria a cambiar los digitos teclados porque todavia no fueron ingresados al buffer istream..

entonces que otras posibilidades me quedan, aparte de usar getch de conio?
lo de la libreria grafica amigo queda descartado porque soy begineer en este momento  :laugh:

:¬¬




neo_from_cs_matrix

Cita de: тαптяαпсє en 21 Agosto 2011, 19:20 PM
Esto te servirá:

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <conio.h>

int main()
{
   using std::cout;
   using std::endl;
   using std::cin;
   using std::string;

   const unsigned short len = 12; //aqui pones la longitud de la cadena de texto
   string letra;
   string respuesta = "Access:";
   string texto = "************";
   int j;

   //PROGRAMA
   cout << "cPanel Login Access" << endl <<"Pass: ";
   for(int i = 1; i <= len; i++)
   {
           letra = getch();
           if(letra == "_")
           {
                    break;
           }

           respuesta.insert(i+6, letra);
           cout << texto.substr(i-1, 1);
   }
   cin >> j;
   cout << endl << endl << respuesta << endl << endl << endl;
   system("pause");
   return 0;
}


gracias, parece ser getch la forma mas directa de lograr esto


тαптяα

si, no es necesaria ninguuna libreria no-estandar de C++

rir3760

getch, getche, etc, son parte de una biblioteca de terceros (conio de Borland) y no pertenecen a la biblioteca estándar de C++.

En el caso que nos ocupa eso, después de todo, no es importante ya que se tendrá que hacer de ese modo o utilizando (en mi opinión una opción mejor) la Win32 API. La referencia en linea del sitio oficial (MSDN) se encuentra en la pagina Consoles, su desventaja es que esta requiere un buen manejo del lenguaje.

Un saludo
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

тαптяα

Cita de: rir3760 en 22 Agosto 2011, 00:08 AM
getch, getche, etc, son parte de una biblioteca de terceros (conio de Borland) y no pertenecen a la biblioteca estándar de C++.

En el caso que nos ocupa eso, después de todo, no es importante ya que se tendrá que hacer de ese modo o utilizando (en mi opinión una opción mejor) la Win32 API. La referencia en linea del sitio oficial (MSDN) se encuentra en la pagina Consoles, su desventaja es que esta requiere un buen manejo del lenguaje.

Un saludo

Que sutil.