Ir ao conteúdo
  • Cadastre-se

C erro no login e senha


yuri_carneiro

Posts recomendados

Boa tarde estou com um problema na minha tela de login, o erro e seguinte coloquei o asterisco pra esconder a senha, mais supondo que errei a digitação e tento corrigir  o asterisco , ele nao apaga ou seja nao consigo corrigi o que deve fazer para que consigo apagar o asterisco e digitar novamente 

 


#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {

        int in=0,l=10,s=10,i=0,verifica_senha=0;
        char c,log[20],senha[20],op;


while(verifica_senha==0){
        printf(" Login: ");
            gets(log);
                printf("\n Senha: ");
        while((c=getch())!=13){ 
    senha=c;
            i++;
    printf("*");     
        }
            senha='\0';
                   i=0;
                    system("cls");
                l= strcmp(log,"adm");
        s= strcmp(senha,"1234567"); 
    if(s==0&&l==0){
        printf("SENHA CORRETA BEM VINDO AO SISTEMA ");system("color 0a");verifica_senha=1;Beep(1500,500);
    }else{
        printf("LOGIN OU SENHA INCORRETA TENTE NOVAMENTE\n",senha);
        system("color 0c");Beep(1000,500);
        system("pause");
        }    
        printf("\n");
        system("cls");
    }
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@yuri_carneiro     seu código está bom , mas você não colocou as bibliotecas necessárias  e então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define u GetStdHandle(STD_OUTPUT_HANDLE)
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
    int in=0,l=10,s=10,i,verifica_senha=0;
    char c,log[20],senha[20],op;
    while(verifica_senha == 0){
        i=0;
        textcolor_2(14,0);
        printf(" Login : ");
        gets(log);
        printf("\n Senha: ");
        while((c=getch())!=13){
            if((int)c==8 ){
                //gotoxy_2(40,5);printf("%d",i);getch();
                if(i>0){
                    i--;
                    printf("\b \b");
                }
            }
            else{
                senha[i]=c;
                i++;
                printf("*");
            }
        }
        senha[i]='\0';
        l= strcmp(log,"adm");
        s= strcmp(senha,"1234567");
        if(s==0&&l==0){
            textcolor_2(10,12);
            printf("\n\n  SENHA CORRETA BEM VINDO AO SISTEMA  ");
            textcolor_2(10,12);
            verifica_senha=1;
            Beep(1500,500);
            Sleep(1000);
        }
        else{
            textcolor_2(12,15);
            printf("\n\n  LOGIN OU SENHA INCORRETA TENTE NOVAMENTE  \n\n\n",senha);
            Beep(1000,500);
            system("pause");
        }
        textcolor_2(14,0);
        system("cls");
    }
    gotoxy_2(10,10);
    printf("Saindo . . . !\n\n\n");
    Sleep(2000);
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@yuri_carneiro    você pode usar aquela função que está lá emcima do código em #define gotoxy , que move o cursor para a posição desejada e assim ele pode voltar para a posição anterior e ali imprimir um caractere espaço , cujo código ASCII é 32 , em cima do asterisco apagando ele da tela , assim você deleta aquele asterisco ,  e decrementa o valor da variável  i  , pois voltou uma posição também na variável  senha . ou também você pode usar o código do compilador " \b  "  que retrocede o cursor em uma coluna  e depois faz também aquele procedimento na variável  .

Link para o comentário
Compartilhar em outros sites

@devair1010  nao conseguir compreender sou meio novo no c kkk poderia me ajudar melhor se nao te incomodar  

adicionado 4 minutos depois
3 minutos atrás, yuri_carneiro disse:

@devair1010  nao conseguir compreender sou meio novo no c kkk poderia me ajudar melhor se nao te incomodar  

@devair1010e nao entedi sua explicaçao podereia ser mais especifico 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define BACKSPACE 8
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

    static char buffer[128];
    int in=0,l=10,s=10,i=0,verifica_senha=0;
    char c,log[20],senha[20],op,letra = '[COLOR="Blue"][B]\0[/B][/COLOR]';
    int main() {
    	 while ((i<127) && (letra!= '\r')) {
        letra = getch();
        if ( letra == BACKSPACE ) {
            if ( i > 0 ) {
                buffer[--i]= '[COLOR="Blue"][B]\0[/B][/COLOR]';
                putchar (BACKSPACE);
                putchar (' ');
                putchar (BACKSPACE);
            } else
                putchar('[COLOR="Blue"][B]\a[/B][/COLOR]');
        } else if (letra != '\r') {
            buffer[i++]=letra;
            putchar('*');
        }
    }
        printf(" Login : ");
        gets(log);
        printf("\n Senha: ");
        while((c=getch())!=13){ 
            senha[i]=c;
            i++;
            printf("*");     
        }
        senha[i]='\0';
        i=0;
        l= strcmp(log,"adm");
        s= strcmp(senha,"1234567"); 
        if(s==0&&l==0){
            printf("\n\n  SENHA CORRETA BEM VINDO AO SISTEMA  ");
            verifica_senha=1;
            Beep(1500,500);
            Sleep(1000);
        }
        else{
            printf("\n\n  LOGIN OU SENHA INCORRETA TENTE NOVAMENTE  \n\n\n",senha);
            Beep(1000,500);
            system("pause");
        }  

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@yuri_carneiro    no hora que você digita os caracteres da senha eles vão sendo inseridos na variável senha um a um , e   a variável  i  está sendo usada para informar em qual posição da string ou vetor de char ,   assim para deletar um caractere à esquerda ,  você verifica o teclado para saber se pressionou a tecla backspace , por exemplo ou outra tecla qualquer ,  e ai dentro desse if volte uma posição , ou coluna , na tela usando o "\b"   e delete o caractere e decremente o valor de i .    assim     :

if((int)c == 8){          /* se pressionou a tecla backspace                        */
    if(i > 0){            /* se ainda houver algum caractere na string              */
        i--;              /* decrementa a variável  i voltando uma posição no vetor */
        printf("\b \b");  /* isso apaga um asterisco que está a esquerda            */
    }
}
else{
    senha[i] = c;         /* insere o caractere na string                           */
    i++;                  /* incrementa a variável  i                               */
    printf("*");
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010 entedi a logica mais porém nao funciona 

adicionado 9 minutos depois

@Herbertbahia entao meu amigo obrigado funciono, mais notei um erro interessante, quando apagamos sem ter nada escrito ele assumi ] ou seja ele asume um valor que nao pode ser apagado, teria como resolver isso ?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

good luck!

#include <ncurses.h>
#include <ctype.h>
#include <string.h>

/* Constantes */
#define T_NOME 10
#define T_SENHA 17

#define USUARIO "MARCOS"
#define SENHA "1234567"

/* Tipos */
typedef struct
{
	char nome[T_NOME];
	char senha[T_SENHA];
}TUsuario;

void UpString(char *n);

int main(void)
{
	TUsuario usuario;
	char d;
	initscr();
	do
	{
		clear();
		printw("Digite o nome de usuario:");
		scanw("%s",usuario.nome);
		refresh();
		UpString(usuario.nome);
		if(strcmp(usuario.nome,USUARIO))
		{
			clear();
			printw("\nUsuario invalido.\n");
			printw("\nPressione qualquer tecla para continuar");
			refresh();
			getch();
		}
	}while(strcmp(usuario.nome,USUARIO));
	keypad(stdscr,TRUE);
	/* Pega a senha */
	do
	{
		int tecla;
		int cont,d;
		cont=0;
		usuario.senha[0]=0;
		do
		{
			noecho();
			clear();
			printw("Digite a senha de usuario:");
			for(d=0; usuario.senha[d]; d++)
				printw("*");
			refresh();
			tecla=getch();
			if(tecla!='\n')
			{
				if(tecla==KEY_BACKSPACE)
				{
					if(cont>=0)
					{
						usuario.senha[cont]=0;
						if(cont)
							cont--;
					}
				}
				else
				{
					usuario.senha[cont]=tecla;
					cont++;
					usuario.senha[cont]=0;
				}
			}
		}while(tecla!='\n');
		if(strcmp(usuario.senha,SENHA))
		{
			clear();
			printw("\nSenha invalida.\n");
			printw("\nPressione qualquer tecla para continuar\n");
			refresh();
			getch();
		}
	}while(strcmp(usuario.senha,SENHA));
	printw("\nUsuario Logado!.");
	refresh();
	getch();
	endwin(); 
	return(0); 
}

void UpString(char *n)
{
	int d;
	for(d=0; n[d]; d++)
		n[d]=toupper(n[d]);
}

para compilar com o gcc e só colocar "gcc NomeDoCodigo.c -o NomeDoExecutavel -lncurses".

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@KXSY  Entao meu amigo com ajuda do pessoal conseguir fazer roda  mais, se você testa ai vera que quando apago agora se nao tiver nada digitado ele assume o ] e esse nao consigo apagar vou colcar o coido pra ver se você consegue me ajudar 

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define BACKSPACE 8
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

    static char buffer[128];
    int in=0,l=10,s=10,i=0,verifica_senha=0;
    char c,log[20],senha[20],op,letra = '[COLOR="Blue"][B]\0[/B][/COLOR]';
    int main() {
        
        
        
        
        printf(" Login : ");
        gets(log);
        printf("\n Senha: ");
        while((c=getch())!=13){ 
          senha[i]=c;
            i++;
            printf("*");          
                  while ((i<127) && (letra!= '\r')) {
        letra = getch();
        if ( letra == BACKSPACE ) {
            if ( i > 0 ) {
                buffer[--i]= '[COLOR="Blue"][B]\0[/B][/COLOR]';
                putchar (BACKSPACE);
                putchar (' ');
                putchar (BACKSPACE);
            } else
                putchar('[COLOR="Blue"][B]\a[/B][/COLOR]');
        } else if (letra != '\r') {
            buffer[i++]=letra;
            putchar('*');
        }
    }          

}
        senha[i]='\0';
        i=0;
        l= strcmp(log,"adm");
        s= strcmp(senha,"1234567"); 
        if(s==0&&l==0){
            printf("\n\n  SENHA CORRETA BEM VINDO AO SISTEMA  ");
            verifica_senha=1;
            Beep(1500,500);
            Sleep(1000);
        }
        else{
            printf("\n\n  LOGIN OU SENHA INCORRETA TENTE NOVAMENTE  \n\n\n",senha);
            Beep(1000,500);
            system("pause");
        }
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@yuri_carneiro Eu não uso Windows então fica difícil ajudar você com esse código é também não sei qual compilador você está usando, se você testar o código que eu coloquei aí em cima vai ver que funcionando tanto no Windows como no linux.

 

Site para testar o código OnlineGDB

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@KXSY eu uso o  Dev-C++5.11 , a linguem desse programa em c, sim eu vi que o que você postou funciona 

adicionado 0 minutos depois

@KXSY mais você nao teria um dica de como resolver o problema do ] 

adicionado 6 minutos depois

@Herbertbahia da forma que você me encinou esta indo porém ele nao dar enter e quando eu apago, ser ter nada escrito ele assume ] como resolvo 
 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define BACKSPACE 8


    static char buffer[128];
    int in=0,l=10,s=10,i=0,verifica_senha=0;
    char c,log[20],senha[20],op,letra;
    int main() {
        
        
        
        
        printf(" Login : ");
        gets(log);
        printf("\n Senha: ");
        while((c=getch())!=13){ 
          senha[i]=c;
            i++;
            printf("*");          
                  while ((i<127) && (letra!= '\r')) {
        letra = getch();
        if ( letra == BACKSPACE ) {
            if ( i > 0 ) {
                buffer[--i]= '[COLOR="Blue"][B]\0[/B][/COLOR]';
                putchar (BACKSPACE);
                putchar (' ');
                putchar (BACKSPACE);
            } else
                putchar('[COLOR="Blue"][B]\a[/B][/COLOR]');
        } else if (letra != '\r') {
            buffer[i++]=letra;
            putchar('*');
        }
    }          

}
        senha[i]='\0';
        i=0;
        l= strcmp(log,"adm");
        s= strcmp(senha,"1234567"); 
        if(s==0&&l==0){
            printf("\n\n  SENHA CORRETA BEM VINDO AO SISTEMA  ");
            verifica_senha=1;
            Beep(1500,500);
            Sleep(1000);
        }
        else{
            printf("\n\n  LOGIN OU SENHA INCORRETA TENTE NOVAMENTE  \n\n\n",senha);
            Beep(1000,500);
            system("pause");
        }
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

12 minutos atrás, yuri_carneiro disse:

eu uso o  Dev-C++5.11 , a linguem desse programa em c, sim eu vi que o que você postou funciona 

Então você usa gcc, aprenda a usá-lo que ele será mais útil do que o devC.

 

15 minutos atrás, yuri_carneiro disse:

mais você nao teria um dica de como resolver o problema do ] 

Pode ser muitas coisas, desde esses carateres malucos de controle 

39 minutos atrás, yuri_carneiro disse:

'\0'

Ou até a checagem do primeiro elemento da string.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@devair1010 Ficar pulando de IDE para IDE, é a mesma coisa de tampar o sol com a peneira.

 

Code::Blocks, DevC++ utilizam GCC, a única diferença e que um tem um GCC mais atual é o outro tem um mais antigo.

3 horas atrás, devair1010 disse:

opa , o que você disse que não funciona ? o " \b "   ?  , testei aqui no codeblocks e está funcionando bem , mas no dev c++ realmente não quis funcionar ,

É esse caractere não é muito recomendado para ser usado (junto com \a \7 e muitos outros), porque o único ambiente que ele funciona bem e em DOS e windowsXP.

 

Recomendo fortemente aprender a usar o GCC e ncurses.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...