Ir ao conteúdo

Posts recomendados

Postado

1. Foi solicitado que, tanto a quantidade de caracteres da estrutura para armazenamento de nomes, quanto a quantidade de registros aceitos na declaração do vetor que representa a lista de registros, seja definida a partir da soma dos dígitos numéricos de seu RA (registro acadêmico).
2. No atributo celular, é preciso validar a entrada para que sejam aceitos números dentro do intervalo 900000000 a 999999999 apenas, e caso o número esteja fora deste intervalo, pedir nova digitação.
3. Validar também a digitação do dia do mês em um intervalo de 1 a 31 apenas, assim como mês entre 1 e 12, e por fim, ano entre 1900 e 2021, reduzindo as chances de entradas de dados inadequados para cada variável, e em caso de falha em qualquer um dos três dados, solicitar nova digitação.

conseguir chegar até aqui


 

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
typedef struct {
    char nome[40];
    int celular;
    int diaNascimento;
    int mesNascimento;
    int anoNascimento;
    int Total, Dia, Mes, Ano;
} dados;

int main (){
    int i, j;
    long long dig1, dig2, aux;
    dados y[40];
    setlocale(LC_ALL, "");
    for (i=0; i<40; i++){
        printf ("\n*** Cadastro %d ***\n", i+1);
        printf ("Nome: ");
        scanf (" %s", y[i].nome);
        printf ("Celular: ");
        scanf ("%d", &y[i].celular);  
        printf ("Data de Nascimento (dia): ");
        scanf ("%d", &y[i].diaNascimento);
        printf ("Data de Nascimento (mês): ");
        scanf ("%d", &y[i].mesNascimento);
        printf ("Data de Nascimento (ano): ");
        scanf ("%d", &y[i].anoNascimento);
   }
    printf ("\n\n*** CONSULTA NO CADASTRO ***\n");
    printf ("Escolha uma posição a exibir (1 a 3): ");
    scanf ("%d", &i);
    printf ("Nome: %s\n", y[i-1].nome);
    printf ("Celular: %d\n", y[i-1].celular);
    printf ("Data de Nascimento: %d/%d/%d\n", y[i-1].diaNascimento);


 

Postado

@Thiago gomes de souza Sempre poste o código usando o botão code:

image.png.04da1cca3499e91fa4f823256c09c898.png

 

Bem, vejo que você não fez nenhuma verificação que foi pedido no enunciado, ou seja, os itens 2 e 3 inteiros.

Vou lhe mostrar um exemplo de como pode verificar o valor inserido para o número do celular, veja:

36 minutos atrás, Thiago gomes de souza disse:

No atributo celular, é preciso validar a entrada para que sejam aceitos números dentro do intervalo 900000000 a 999999999 apenas, e caso o número esteja fora deste intervalo, pedir nova digitação.

#include <stdio.h>

int main ()
{
    int celular;
    scanf("%d%*c", &celular);
    
    // O loop abaixo faz a verificacao
    while(celular < 900000000 || celular > 999999999)
    {
        // Caso não esteja dentro do intervalo
        printf("Numero de celular invalido!\nDigite novamente: ");
        scanf("%d%*c", &celular);
    }
    
    printf("O numero de celular eh: %d", celular);
    return 0;
}

Agora faça a verificação para o dia, mês e ano inseridos.

 

A respeito disso:

42 minutos atrás, Thiago gomes de souza disse:

printf ("Data de Nascimento: %d/%d/%d\n", y[i-1].diaNascimento);

Faltam os argumentos respectivos ao mês e ao ano.

  • Curtir 3
Postado

@Gildeone Soares A primeira chamada da scanf() grava um valor em `celular`, e para verificar se esse valor está dentro do intervalo requisitado, basta usar um loop:

Em 12/07/2021 às 18:36, Lucca Rodrigues disse:
while(celular < 900000000 || celular > 999999999)
    {
        // Caso não esteja dentro do intervalo
        printf("Numero de celular invalido!\nDigite novamente: ");
        scanf("%d%*c", &celular);
    }

Considerando que `celular` já tem um valor armazenado, verificamos se esse valor está fora do intervalo 900000000 a 999999999, ou seja, se valor < 900000000 ou valor > 999999999, e caso estiver, chamamos a scanf() novamente para ler outro valor.

 

17 minutos atrás, Gildeone Soares disse:

o loop de verificação seria dentro do (For) ?

Você pode usar o for, eu usei o while porque foi conveniente.

 

17 minutos atrás, Gildeone Soares disse:

toda vez que um numero de  celular for inserido ele verificaria né isso ?

Quando um novo valor é gravado, ele verifica se está fora do intervalo.

  • Curtir 1
Postado

fiz da seguinte forma:  só que estou sentindo que o loop da validação do celular está entrando diretamente na condição mesmo colocando um numero de celular correto, e peguei a mesma ideia coloquei na data só que a validação nem entra na condição quando digito a data errada, estou me passando por algo ? tem algo que eu não entendi direito ? pois no celular foi corretamente a condição mesmo entrando direto mas na data não vai 


#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
typedef struct {
    char nome[41];
    int celular;
    int diaNascimento;
    int mesNascimento;
    int anoNascimento;
    
} dados;

int main (){
    int i, j, celular;
    long long dig1, dig2, aux;
    dados y[41];
    setlocale(LC_ALL, "");
    for (i=0; i<41; i++){
        printf ("\n*** Cadastro %d ***\n", i+1);
        printf ("Nome: ");
        scanf (" %s", y[i].nome);
        
        printf ("Celular: ");
        scanf ("%d", &y[i].celular);  
        while(celular < 900000000 || celular > 999999999)
    {
        // Caso não esteja dentro do intervalo
        printf("Numero de celular invalido!\nDigite novamente: ");
        scanf("%d%*c", &celular);
    }
       
	    printf ("Data de Nascimento (dia): ");
        scanf ("%d", &y[i].diaNascimento);
       while(diaNascimento < 1 || diaNascimento > 31)
    {
        printf("Data de nascimento invalido!\nDigite novamente: ");
        scanf("%d%*c", &diaNascimento);
    }
       
	    printf ("Data de Nascimento (mês): ");
        scanf ("%d", &y[i].mesNascimento);
        
        while(mesNascimento < 1 || mesNascimento > 12)
    {
        printf("Data de nascimento invalido!\nDigite novamente: ");
        scanf("%d%*c", &mesNascimento);
    }
    
		printf ("Data de Nascimento (ano): ");
        scanf ("%d", &y[i].anoNascimento);
        while(anoNascimento < 1900 || anoNascimento > 2021)
    {
        printf("Data de nascimento invalido!\nDigite novamente: ");
        scanf("%d%*c", &anoNascimento);
    }
    
   }
    printf ("\n\n*** CONSULTA NO CADASTRO ***\n");
    printf ("Escolha uma posição a exibir (1 a 41): ");
    scanf ("%d", &i);
    printf ("Nome: %s\n", y[i-1].nome);
    printf ("Celular: %d\n", y[i-1].celular);
    printf ("Data de Nascimento: %d/%d/%d\n", y[i-1].diaNascimento);
}

 

@Lucca Rodrigues

  • Curtir 1
Postado

@Gildeone Soares Nesse caso as variáveis que você precisa validar são todas membros da struct, então você tem que acessá-las da seguinte forma, por exemplo:

printf ("Celular: ");
scanf ("%d%*c", &y[i].celular);
while(y[i].celular < 900000000 || y[i].celular > 999999999)
{
	// Caso não esteja dentro do intervalo
	printf("Numero de celular invalido!\nDigite novamente: ");
	scanf("%d%*c", &y[i].celular);
}

Não se esqueça de usar o %*c como último especificador na scanf(), ele lê e ignora o '\n' digitado ao se teclar Enter no final da leitura, isso impede que o '\n' restante no fluxo eventualmente interfira em outras leituras.

E bem, a mesma forma de acessar vale para `diaNascimento`, `mesNascimento` e `anoNascimento`.

 

De resto, esta linha:

7 minutos atrás, Gildeone Soares disse:
printf ("Data de Nascimento: %d/%d/%d\n", y[i-1].diaNascimento);

Como eu havia dito anteriormente:

Em 12/07/2021 às 18:36, Lucca Rodrigues disse:

A respeito disso:

Em 12/07/2021 às 17:52, Thiago gomes de souza disse:

printf ("Data de Nascimento: %d/%d/%d\n", y[i-1].diaNascimento);

Faltam os argumentos respectivos ao mês e ao ano.

  • Curtir 1
Postado

@Lucca Miraglia

2 minutos atrás, Lucca Miraglia disse:

Utilizo o fgets

É a mais conveniente a se usar.

4 minutos atrás, Lucca Miraglia disse:

não passar um valor determinado

Com scanf(), basta inserir no especificador depois do % a quantidade de caracteres que devem ser lidos e gravados na string.

Com fgets(), o número máximo de caracteres a serem lidos é o segundo parâmetro, então você é obrigado a ter que determinar isso.

  • Curtir 1
Postado
Em 12/07/2021 às 17:52, Thiago gomes de souza disse:
typedef struct {
    char nome[40];
    int celular;
    int diaNascimento;
    int mesNascimento;
    int anoNascimento;
    int Total, Dia, Mes, Ano;
} dados;

 

Seu programa não vai operar com esses dados. Use apenas char e sua vida fica mais simples. Em relação ao celular trata-se apenas de garantir que são números e que o primeiro é 9. 

No caso de telefones há um padrão internacional para os números e em geral é melhor não fugir disso. um sinal, código de de pais e os dígitos. Tem uma norma, E.164 ITU. E o telefone tem letras que equivalem aos números...

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!