Ir ao conteúdo

Posts recomendados

Postado

Estou terminando um trabalho e falta algumas coisas. Queria saber a opinião de vocês nessas questões.

1. Preciso validar um email ele tem que ter um @ nao pode ter menos de 2 letras no inicio e dever ter um  ponto final.

2. Também preciso achar um aluno pelas 3 primeiras letras do nome dele.

No código abaixo ele esta comparando o nome inteiro. 

 

 

printf("Digite o nome do aluno:");	
	fflush(stdin);
	gets(nome);
	for(x=0; x<4; x++){
		if(strcmp(al_C[x].nome, nome)==0){	

			salva_V=1;
	
		
		}		
			  
	} 	
			
}

 

Postado

@Igor Vargas Olá. Quanto a validar o e-mail recomendo trabalhar com índices da string referente ao e-mail. 

Primeiro verifique se o '@' está no e-mail e guarde esse índice. Feito isso verifique se os dois índices anteriores ao índice onde está o '@' são diferentes de espaço. Para finalizar, verifique se o último índice da string (e-mail), antes do '\0', é igual ao ponto

Quanto as três primeiras letras do nome a mesma coisa. Armazene essas três letras em uma string auxiliar e depois verifique se os três primeiros índices da string auxiliar são iguais aos três primeiros índices da string referente ao nome

algo assim:

letra[i] == nome[i] && letra[i + 1] == nome[i + 1] && letra[i + 2] == nome[i + 2]

Para fazer a verificação acima use um for que percorra todos os índices do nome 

Também daria para tentar fazer uso da função strstr, que verifica a ocorrência de uma substring em uma string

adicionado 21 minutos depois

@Igor Vargas Segue um pequeno exemplo da função strstr da biblioteca <string.h>:

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

int main() {
    char nome[] = "Manuel";
    char subString[] = "Man";
    char *result = strstr(nome, subString);
    if (result != NULL) {
        printf("%s\n", nome);
    }
    return 0;
}

 

Postado

Eu tentei fazer o que você falou.

O nome não funcionou aqui.

printf("Digite o nome do aluno:");
char string[3];
	fflush(stdin);
	gets(nome);
	for(x=0; x<4; x++){
	string[x]=nome;
		if(string[x] == al_C[x].nome && string[x+1] == al_C[x+1].nome && string[x+1] == al_C[x+1].nome){
			salva_V=1;
		}

O email fiz uma parte mas n entendi o resto.

printf("Digite seu e-mail:");
        fflush(stdin);
        gets(al[cont].email);
       	for(x=0; x<strlen(al[cont].email); x++){
       		if(al[x].email=='@'){
       			passa++;
			   }if(al[passa-2].email!=' '){
			   	
			   }
		   }

Faz poucos meses que estou programando tem muita coisa que não assimilei direito. @giu_d

Postado

@Igor Vargas Segue uma alternativa para o nome usando a função q mencionei:

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

int main() {
    char nomeArmazenado[] = "Joaquin";
    char nome[40];

    printf("Nome: "); // aqui digita as três primeiras letras
    scanf("%3s", nome); // %3s é para ler 3 letras apenas    

    char *result = strstr(nomeArmazenado, nome);
    if (result)
        printf("%s\n", nomeArmazenado);
    else
        printf("Nao encontrado!\n");

    result = NULL;

    return 0;
}

Essa forma acima me parece interessante de ser usada no seu código

 

Segue uma forma de validar o e-mail:

char email[] = "[email protected]";
int i;

for (i = 0; i < strlen(email); i++) {
    if (email[i + 2] == '@' && email[i + 1] != ' ' && email[i] != ' ') {
        printf("Validado!");
    }
}

Teste aí amigo. Fiz correndo tudo isso hehe

 

adicionado 0 minutos depois

quanto ao e-mail ficou a questão do ponto

Dá para colocar mais essa condição no e-mail. Só não sei se é no final do e-mail ou tipo .com

Se é no final seria isso mais essa condição no if: email[strlen(email) - 1] == '.'

adicionado 33 minutos depois

Por hoje tá bom amigo. Nesse domingão, se Deus permitir, a gente conclui esse exercício.

abraço!

Postado

O problema é que o mesmo scanf que eu uso pra digitar o nome normal seria o mesmo que eu teria que pegar as 3 primeiras letras do nome e compara com o nome que esta guardado no struct para printar uma grade de horário.

 

Quanto ao email se eu fizesse uma condição assim funcionaria? @giu_d

if(strcmp(email[x],".com")==1 ||strcmp(email[x],".br")==1 || strcmp(email[x],"hotmail")==1 || strcmp(email[x],"yahoo")==1||  strcmp(email[x],"gmail")==1  || email[x] <2){
printf("Email invalido");

}

 

Postado

@Igor Vargas Olá. A função strcmp faz a comparação entre duas string. Percebe q dessa forma q você está fazendo, está comparando um caractere com uma string. Devido a isso dá erro ao executar o programa

 

quanto ao nome não é obrigatário colocar o %3s, pode deixar só o %s. Mas aí só vai dar certo se o usuário digitar as três primeiras letras apenas

Postado

O problema pra mim é que não posso usar

*result = strstr

porque não aprendi isso em aula e o professor é meio rigido nesse quesito de usar só o que é aprendido em aula. Estou tentando outras formas mas nenhuma deu certo ainda

Postado

@Igor Vargas Entendi. Você pode fazer assim:

char nomeArmazenado[] = "Joaquin";
char nome[40];

printf("Nome: "); // aqui digita as três primeiras letras
scanf("%s", nome);    

if (strstr(nomeArmazenado, nome) != NULL)
    printf("%s\n", nomeArmazenado);
else
    printf("Nao encontrado!\n");

Não é preciso fazer uso de um ponteiro. Use essa função strstr tal como usaria a função strcmp 

adicionado 13 minutos depois

Outra sugestão q eu daria seria trabalhar com índices ao invés de usar essa função. Tal como mencionei no início do tópico. 

O importante é entender bem o q está sendo feito:

char nome[] = "Joaquin";
char letras[50]; // aqui pode usar qualquer nome. Estou usando o nome letras
int i;

printf("Nome: "); // aqui digita as três primeiras letras
scanf("%s", letras);

for (i = 0; i < strlen(nome); i++) {
    if (nome[i] == letras[i] && nome[i + 1] == letras[i + 1] && nome[i + 2] == letras[i + 2]) { //nessa linha são comparadas as 3 letras
        printf("nome encontrado");
    }
}

Mas claro. O q estou fazendo é apenas dando sugestões para resolver o problema.

adicionado 22 minutos depois

Daria para simplificar e fazer assim:

if (nome[0] == letras[0] && nome[1] == letras[1] && nome[2] == letras[2]) {
    printf("nome encontrado");
}

Só teste bem essa forma q passei agora. Fica bem mais simples assim. Na verdade é a mesma coisa. Estou comparando os índices do 'nome' com os índices da 'letras'

Postado

Deu certo a questão do nome ahah valeu.

Agora sobre o email

char email[] = "[email protected]";
int i;

for (i = 0; i < strlen(email); i++) {
    if (email[i + 2] == '@' && email[i + 1] != ' ' && email[i] != ' ') {
        printf("Validado!");
    }
}

Falta o .com ou .br estou pensando em fazer um vetor e colocar os nomes tipo @hotmail ou gmail dentro e depois comparar ele com o email inscrito. @giu_d

Postado

@Igor Vargas

13 minutos atrás, Igor Vargas disse:

estou pensando em fazer um vetor e colocar os nomes tipo @hotmail ou gmail dentro e depois comparar ele com o email inscrito

Té daria. Mas aí você cai na questão de ter q usar a função strcmp, que compara a e-mail todo.

É preciso verificar se é .com ou .br ou só se tem o ponto?

Postado

@Igor Vargas Té daria para usar a mesma lógica do nome. No for você está verificando se tem o '@' por exemplo e se os dois índices anteriores são diferentes de espaços.

Daria para usar um outro for para essa parte do ponto. Verificar se tem o ponto e se os índices seguinte são iguais a 'com' ou iguais a 'br'. Ficaria um if bem grande, ou daria para usar dois if dentro do for, um para '.com' e outro para '.br'

 

Mas veja como ficaria fácil com a função strstr:

if (strstr(email, ".com")) || strstr(email, ".br")) { // aqui é o mesmo q fazer ((strstr(email, ".com") != NULL)
    printf("Validado");
}

Daria para colocar essas condições no mesmo for ou até no mesmo if

adicionado 11 minutos depois

Ou assim. Trabalhando com índices:

for (i = 0; i < strlen(email); i++) {
    if (email[i] == '.' && email[i + 1] == 'c' && email[i + 2] = 'o' && email[i + 3] == 'm') { // nesse if verifico o .com
        // ok
    }
}

Fica a seu critério qual forma usar. Se gostou de alguma apresentada, claro. Vou procurar pensar em outra maneira

adicionado 54 minutos depois

@Igor Vargas Veja como ficaria se usar um só if:

for (i = 0; i < strlen(email); i++) {
    if (email[i + 2] == '@' && email[i + 1] != ' ' && email[i] != ' ' && email[strlen(email) - 1] == '.' ||
        (strstr(email, ".com") || strstr(email, ".br"))) {
             printf("Validado!");
             break;
    }
}

Ficou até q bem "complexo" o if dessa forma, mas funciona. O ideal seria fazer uso de 2 if. 1 para os índices e outro para a função

Postado

@Igor Vargas Procure entender bem o q está sendo feito. Primeiramente é importante saber q uma string em C é um vetor de char (vetor de caracteres) ou cadeia de caracteres. Sendo uma string um vetor, ela também é indexada. O 1º índice é 0 o 2º é 1 etc... 

No caso do nome fica fácil saber os índices que precisamos comparar: índices 0, 1 e 2.

Mas no caso do e-mail, não tem com saber em q índice da string está o '@' e também não tem como saber em q índice está o '.' (ponto). Devido a isso é usado o for para navegar por todos os índices da string e-mail e poder verificar em q índice da string está o '@' por exemplo. Está conseguindo entender essa parte?

Quanto a função strstr o q ela faz é verificar a ocorrência de uma substring dentro de uma string. Por exemplo: a string é "Joaquim". Nesse caso, a substring 'quim' está dentro da string 'Joaquim". 

Caso tiver dúvidas pergunte.

Mas quanto ao e-mail me parece mais interessante usar os índices para verificar o ponto e depois as letras:  .com ou .br

Mas o importante mesmo é entender bem o q está sendo feito

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!