Funcion C

_kRuStY_

Hola, estoy buscando una funcion en C que me lea de pantalla pero no imprima por pantalla lo que voy escribiendo. Como para meter una contraseña pero no aparezca por pantalla la contraseña escrita.

Muchas gracias ^^

LOc0


#include <stdio.h>
#include <string.h>
#include <conio.h>

void main()
{

char pass[20];


printf("\n\tPass: ");
int conta=0;
int i=0;
   
 //Se piden caracteres hasta que se introduca enter
while(pass[i]!=13)
{

     //Capturamos carácter
    pass[i]=getch();
   
    //Si es un carácter válido y no se ha sobrepasado el límite de 20 caracteres se imprime un asterisco
    if(pass[i]>32 && i<20)
            {
              putchar('*');
              i++;
            }
    //Si se pulsa la tecla RETROCESO, se retrocede un carácter, se imprime un espacio para eliminar el asterisco y se vuelve a retroceder para que el siguiente asterisco se coloque a continuación del anterior.
    else if(pass[i]==8 && i>0)
            {
              putchar(8);
              putchar(' ');
              putchar(8);
              i--; 
            }
               
}
   
pass[i]='\0';
   
if(!strcmp(pass, "loquesea"))
    printf("\n\n\n\n\n\t\tACCESO PERMITIDO");
else
    printf("\n\n\n\n\n\t\t**ACCESO DENEGADO**");

getch();
}
[/i]

Si no quieres (o no puedes) usar conio.h tendrás que tirar del API.

Salu2 ;)

SicKneSs

#2 qué significa tirar de la API ?

_kRuStY_

Muchas gracias #2,usando getc si sabia como hacerlo pero la cosa es que no me dejan usar conio.h pero he encontrao una funcion que hace lo mismo que getc pero sin utilizar conio.h.

Si algien esta interesado la pongo aqui.

:D

MTX_Anubis

hombre ya que lo has preguntado, aal menos pon la solución por si a alguien le pasa en un futuro y usa el buscador xD

LOc0

#3

http://es.wikipedia.org/wiki/Application_Programming_Interface
http://es.wikipedia.org/wiki/Win32

En vez de usar getch() de conio.h, se pueden usar las funciones del WINAPI para leer de la consola -> http://pastebin.es/1764

(En Linux está la librería ncurses).

Sea como sea, no existe un "método ANSI C" para hacer eso.

Salu2 ;)

_kRuStY_

Ai esta...No tengo ni puta idea de lo que hace pero funciona xD

int mygetch( ) {
struct termios oldt,
newt;
int ch;


tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ICANON | ECHO ;
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );


return ch;
}

LOc0

#7

Gracias, no sabía de <termios.h> (Me va a venir de pm para portar programitas de consola de Win a Linux). Lo que hace esa función es desactivar la entrada canónica de la consola (para que no haya que pulsar ENTER) y desactivar el ECHO (para que no salga impresa la tecla pulsada). De esta forma getchar() se comporta como getch().

Salu2 ;)

PD: Para usar lo que comenta #7 hacen falta estos headers:
http://pastebin.es/1767

Usuarios habituales

  • LOc0
  • _kRuStY_
  • MTX_Anubis
  • SicKneSs