Soy nuevo en el foro, asi que si me equivoco me lo hacen saber =) . No sabia si crear un nuevo tema, en fin. Aqui comparto unas funciones que hace tiempito hice para leer en consola, intente limitar los caracteres, si tienen sugerencias se los agradeceria. Por cierto hay alguna función estandar que haga lo mismo que getch(); para no usar la libreria conio.h, este código lo compile con Dev C++ 4.9
libreria.h#include<conio.h>
// esta función lee caracteres limitando la cantidad de estos
void ygets(char *c, register int n)
{register char car;
register int t;
for(t=0; t<n ;) //lee hasta el maximo de caracteres
{car=getch(); // caracter por caracter
switch(car)
{// si presionaste enter, ingresa caracter nulo
// y termina el bucle
case '\r': c[t]='\0' ;return;
// si presionaste delete, retrocede, imprime espacio
// y vuelve a retroceder, da la impresión que no
// presionaste nada =)
case '\b': if(t>0) {t-- ;printf("\b \b");};
break;
// muestra lo demas y almacena en nuestra variable
default: putchar(car); c[t]=car; t++;
}
}
c[n]='\0';
}
// casi lo mismo quet ygets(), pero sólo
// admite numeros en el switch
void LeerN(char *c, int n)
{register char car;
register int t;
for(t=0;t<n;)
{car=getch();
switch(car)
{case '\r': c[t]='\0' ;return;
case '\b': if(t>0) {t-- ;printf("\b \b");}; break;
case '0':case '1':case '2':case '3':case '4':case '5':
case '6':case '7':case '8':case '9':
c[t]=car;putchar(car);t++;break;
default: break;
}
}
c[n]='\0';
}
// para leer los passwords hace lo mismo que ygets()
// pero muestra "*" en lugar de caracteres o.0!
void leerPass(char *c, int n)
{register char car;
register int t;
for(t=0;t<n;)
{car=getch();
switch(car)
{case '\r': c[t]='\0' ;return;
case '\b': if(t>0) {t-- ;printf("\b \b");}; break;
default: {putchar('*');
c[t]=car; t++;}
}
}
c[n]='\0';
}
#include <stdio.h>
#include <iostream>
#include "libreria.h"
int main(int argc, char *argv[])
{ char t[15];
printf("Max 9 digitos \n");
printf("Solo numeros: "); LeerN(t,9);
printf("\nnum: "); printf("%s \n",t);
//-----------------------
printf("\nMax 9 caracteres");
printf("\nCualquier caracter: "); ygets(t,9);
printf("\nCadena: "); printf("%s \n",t);
//------------------------
printf("\nMax 5 caracteres");
printf("\nLee Pass: "); leerPass(t,5);
printf("\nIngreso: "); printf("%s",t);
getch();
return EXIT_SUCCESS;
}