Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Igor Vargas

C Verificar se um e-mail é válido ou não

Recommended Posts

Eu fiz esse código para a verificação mas ele n esta reconhecendo a condição.

 do{
        printf("Digite seu e-mail:");
        fflush(stdin);
        gets(al[cont].email);
        for (i = 0; i < strlen(al[i].email); i++) {
       	if(al[i].email=='@'){
       	salva_A=i;	
       	printf("%d",salva_A);
		   }else if(al[i].email=='.'){
		   	salva_B=i;
		   }
       if(al[i].email < 2 && al[i].email=='@'){
       	printf("E-mail invalido!");
	   yy=1;
	   }
	   else if(al[i+salva_A].email=='@' && al[i+salva_B].email=='.'){
	   	printf("E-mail valido!");
	   	yy=0;
	   }
}
      
	   }while(yy!=0); 

 

  • Obrigado 1
  • Triste 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas   depois de pegar a string que contém o e_mail  , verifique se o email tem o arroba e se tem oito ou mais caracteres no inicio até o arroba e se tem o pontocom e se depois do arroba tem quatro ou mais caracteres até o pontocom ..  nesse caso é válido .

  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas Olá. Só uma dúvida: Esse é aquele mesmo exercício para validar o nome e o e-mail?

Se é o mesmo e se você não pode fazer uso d nenhuma função você vai ter que trabalhar com índices para validar o e-mail.

Uma string é um vetor de caracteres (char). Logo, uma string, sendo um vetor, é indexada. Ou seja: o primeiro índice é o 0, o segundo o 1 etc... 

No caso do e-mail não tem como saber em q índice da string o '@' está. Por isso é preciso usar um for ou while para percorrer toda a string (um e-mail é uma string) 'procurando' se no e-mail tem o  '@'. Se achou, aí verificar o q for preciso. Tal como se os dois índices anteriores ao índice onde está o '@' são diferentes d espaços, etc...

É tal como foi falado da outra vez. Se é o mesmo exercício, claro

Qualquer coisa é só perguntar, ok?

Editado por giu_d
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá todos!

  • É difícil porque existem muitas coisas que pode fazer vários inválidos. Vejo situação de se perguntar; o que é um e-mail invalido? 

Por exemplo @devair1010 nos diz o que é um e-mail válido 

Em 22/06/2018 às 00:34, devair1010 disse:

verifique se o email tem o arroba e se tem oito ou mais caracteres no inicio até o arroba e se tem o pontocom

 

Basta buscas essas strings com a função strstr( ... )

Editado por AnsiC
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC

2 horas atrás, AnsiC disse:

Basta buscas essas strings com a função strstr( ... )

 

Me parece q é esse o problema. Ele não pode fazer uso de funções como essa. 

Segundo o q o autor do tópico me disse, o professor deles é bastante rígido nessa parte e só aceita o uso dos recursos q foram vistos nas aulas

Editado por giu_d
  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, giu_d disse:

Ele não pode fazer uso de funções como essa

Putz !!!

 

 

  • Pois então; no código vemos uma certa intenção que está corretíssima, o que não vejo nas escritas que têm muitos erros semáticos.

Ex.:

if(al[i].email=='@')

email vem sendo comparada diretamente com caractere está errado, em C sabemos que o "interpretador" não faz esse tipo de conversão, coisa que só vemos em linguagem de alto nível. Então antes de tudo tem que saber dessa coisas se não vai empaca toda vez.

"Sem falar que o editor sinaliza problemas desse tipo"

 

 

Valeu!

Editado por AnsiC
  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, AnsiC disse:

Olá todos!

  • É difícil porque existem muitas coisas que pode fazer vários inválidos. Vejo situação de se perguntar; o que é um e-mail invalido? 

Concordo.

8 horas atrás, AnsiC disse:

Por exemplo @devair1010 nos diz o que é um e-mail válido 

Em 22/6/2018 às 05:34, devair1010 disse:

verifique se o email tem o arroba e se tem oito ou mais caracteres no inicio até o arroba e se tem o pontocom

Discordo :atirador:

8 horas atrás, AnsiC disse:

Basta buscas essas strings com a função strstr( ... )

Normalmente se trata de programas para estudo mas se a coisa for séria o problema é bem mais complexo. Da uma olhada aqui na sintaxes de um email: https://en.wikipedia.org/wiki/Email_address#Syntax

 

Tenho entendido que para validar emails uma boa estratégia seria usar Autômato finito determinístico, mas também é como matar moscas a canhão para esse enunciado >_<.

adicionado 1 minuto depois

Usar regex também n seria uma má ideia.

  • Curtir 3
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ... com tudo que aprendi, eu mesmos respondo minha pergunta:

 

  • Daí me respondo:
21 horas atrás, AnsiC disse:

o que é um e-mail invalido? 

  1. Tem mais de um '@' ou nenhum
  2. Tem somente numerais ou nada nos extremos de '@'
  3. Tem 1 ou mais dots (.) em sequência ou seguido de '@'
  4. Tem parte local [antes do '@'] de tamanho maior que 64 caracteres
  5. Tem espaço "   "
  6. Não tem caixa de entrada.

 

  • Também pensei nisso com interesse porque seria um função ou subprograma muito útil
13 horas atrás, vangodp disse:

Usar regex também n seria uma má ideia.

 

Editado por AnsiC
  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas Aproveitar q você está online. Se puder nos dizer como deve ser a validação do e-mail ajudaria muito.

Como pode ver teriam muitas pessoas aqui p dar sugestão e aí creio q você chegará a uma resposta q t agrade.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Email deve possuir: 3 caracteresou mais; um sinal de arroba (@); outros 3 caracteres ou mais; seguidos de um sinal de ponto final (.); e mais um conjunto de pelo menos 2 caracteres;
 

 

@giu_d

 

 

 

não funciona pra todas condições. Debuguei e ele pula a condição do @

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






main(){
	
	int x;
	char email[50]={"Teste@hotmail.com"};
	int arroba,ponto,passa,maior,c_P,c_S,i;
	int tam=strlen(email);
	char teste='.';
	 for (i = 0; i < tam; i++) {
       if(email[i] > 3){   
		 maior=1;	
	   }if(email[i] == '@'){
	   	arroba=1;
	   	   	
	   }if(arroba == 1 &&  email[i] >= 3){
	  	c_P=1;
	   }if(email[i]=='.'){
	   		ponto=1;
		   }if(ponto=1 && email[i] >=2){
	   		c_S=1;
	   }
	
	if(maior==1 && arroba == 1 && c_P==1 && c_S ==1){
    	passa=1;
	}else{
		passa=0;
	}
		  	  
    
	}  
	
	if(passa==1){
		printf("Valido");
	}else{
		printf("Invalido");
	}
	
		
	
	}
	

 

Editado por Igor Vargas
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)
  • Vamos implementar solução com base em máscara de entrada. 
Em 26/06/2018 às 16:11, Igor Vargas disse:

Email deve possuir: 3 caracteresou mais; um sinal de arroba (@); outros 3 caracteres ou mais; seguidos de um sinal de ponto final (.); e mais um conjunto de pelo menos 2 caracteres;

/**                                                                           
 * programa ANSIC  --- Programa Validar e-Mail                                *
 * enconding: OEM 860, compilador: GCC 3.7.0  MinGW.org                       *
 * [MSC v.6.3.0-1 32b (AMD6 4)] on win32 editor: Notepad++ 7.5.7 32 32 bits   *
 * OS: win7 64 bits                                                           *
 * file: email.c                                                 ver: 1.0.0   *
 */

/* INCLUSOES                                                                  */
#include <stdio.h>

/* DEFINICOES                                                                 */
#define false 0
#define true  1
  
/* FUNCOES                                                                    */
/* chbuscar --- retorna a posição do elemento no vetor de tipos char          */
int chbuscar(const int siz, const char base[siz], const char elem)
{
    for (int e = 0; e < siz; e += 1) {
        if (elem == base[e])
        {   return e;}
    }
    return -1;
}

/* pegemail --- devolve 1 se a entrada for de um e-mail válido, 0 se não      */
char validemail(char email_[], int limit)
{
/* TIPOS LOCAIS                                                               */
    char a = 0;               /* Contém a próxima do @ no e-mail              */
    char p = 0;               /* Contém p próxima do ponto no e-mail          */
    char t = 0;               /* Contém t próxima do segundo teste            */
    char s = 0;               /* Contém s o tamanho da string e-mail          */

/* PROCESSAMENTO                                                              */
    s = chbuscar(limit, email_, '\0'); /* ?Mesmo com limite ainda busca saber o
    tamanho real do string na memória.                                        */ 
    a = chbuscar(s, &email_[t], '@');  /* ?Determinar agora a próxima onde se vΩ
    a primeira ocorrΩncia, e única de uma arroba, e guarda na memória         */
    if (2 < a) { /* ?Se a próximo @ maior que 2 então existe string antes de a
    que satisfaz a condição de e-mail válido                                  */
        if (email_[a + 1] == '.' || email_[a - 1] == '.') /* ?Ainda é preciso sa
        ber se existe pontos depois e antes do primeiro e talvez único arroba se
        não existir arroba entre pontos então devemos continua nos  testes    */
        {   return false;}
        t = chbuscar(s - (a), &email_[1 + (a)], '@'); /* ?Agora buscamos outra
        ocorrência de arroba, para isso subtraiu   do limite a posição de    @
        e posicionamos o endereço da memória no próximo valor depois de arroba
        e pesquisamos mais uma vez pelo @      na memória                     */
        if (0 <= t) /* ?Se t for maior ou igual a 0 é porque encontrou mais uma
        ocorrência de arroba, finalizando a buscar, se não continua os testes */
        {   return false;}
        p = chbuscar(s - (a), &email_[1 + (a)], '.'); /* ?Agora buscamos por um
        ponto depois do arroba, nisso passamos o limite como sendo a próximo de
        arroba menos o tamanho do string, e o endereço imediatamente após arro-
        ba, e buscamos o ponto                                                */        
        if (p < 2) /* ?Se a posição do ponto for menor que 2 significa que não
        existe entre o @ e ponto o limite mínimo de 3 caracteres, daí retorna
        falso, se não então continua buscando outra ocorrencia de ponto      */
        {   return false;}
        t = chbuscar(s - (1 + (a + p)), &email_[2 + (a + p)], '.'); /* ?Procura 
        uma vez pelo ponto em busca de ocorrências repetidas, o limite da busca
        agora é a diferença de @ e .       o que sobra da string, se existir ou-
        ponto então não é o email válido                                      */
        if (0 <= t) /* ?Se t é maior ou igual a 0 então encontrou pontos depois
        de ponto, log esse email tem 2 ou mais ponto, é inválido             */
        {   return false;}
        t = chbuscar(s - (1+ (a + p)), &email_[2 + (a + p)], '\0'); /* ?Por fim
        buscamos pelo fim da string começando da única ocorrência de ponto, se*/
        if (1 < t) /* t for maior 1 então existe pelo menos 2 caracteres depois
        de ponto, por fim se nada der errado acima, o e-mail é válido         */
        {   return true;}
    }
/* FIM */
    return false;
}

/* main --- função principal do programa                                      */
int main(void)
{
/* TIPOS LOCAIS                                                               */
    char email[120] = {"fuf@mail.ig"};
/* RESULTADO                                                                  */
    printf("%d\n", validemail(email, 120));
/* FIM                                                                        */
  return 0;
}

 

Versão sem Texto

/**                                                                          **                                                       
 * programa ANSIC  --- Programa Validar e-Mail                                *
 * enconding: OEM 860, compilador: GCC 3.7.0  MinGW.org                       *
 * [MSC v.6.3.0-1 32b (AMD6 4)] on win32 editor: Notepad++ 7.5.7 32 32 bits   *
 * OS: win7 64 bits                                                           *
 * file: email.c                                                 ver: 1.0.0   *
 */

#include <stdio.h>

#define false 0
#define true  1

int chbuscar(const int siz, const char base[siz], const char elem)
{
    for (int e = 0; e < siz; e += 1) {
        if (elem == base[e])
        {   return e;}
    }
    return -1;
}
char validemail(char email_[], int limit)
{
    char a = 0;
    char p = 0;
    char t = 0;
    char s = 0;

    s = chbuscar(limit, email_, '\0');
    a = chbuscar(s, &email_[t], '@');
    if (2 < a) {
        if (email_[a + 1] == '.' || email_[a - 1] == '.')
        {   return false;}
        t = chbuscar(s - (a), &email_[1 + (a)], '@');
        if (0 <= t)
        {   return false;}
        p = chbuscar(s - (a), &email_[1 + (a)], '.');        
        if (p < 2)
        {   return false;}
        t = chbuscar(s - (1 + (a + p)), &email_[2 + (a + p)], '.');
        if (0 <= t)
        {   return false;}
        t = chbuscar(s - (1 + (a + p)), &email_[2 + (a + p)], '\0');
        if (1 < t)
        {   return true;}
    }
  return false;
}
int main(void)
{
  char email[120] = {"fuf@mail.ig"};
  printf("%d\n", validemail(email, 120));
  return 0;
}

Dúvidas, sugestão e críticas?

Editado por AnsiC
  • Curtir 3
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×