Ir ao conteúdo
  • Cadastre-se
camilamaste

C C - problemas com estruturas

Recommended Posts

Estava fazendo esse programa mas os valores na estrutura ficam misturados. Também não sei se é o melhor jeito de fazer o programa (com estrutura, sem ponteiro). Alguém pode ajudar? Obrigada.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 /* Aniversários em meses do ano */
struct aniversario {
char nome[60],telefone[11],email[70],data[8];
};

int main() {

/* Variáveis */

int mes,dias;
int ano=2018;
char nome[60],telefone[11],email[70],data[8];
    /*LEITURA DAS VARIAVEIS DO SWITCH */
    printf("Digite o mes desejado: ");
    scanf("%d",&mes);
    /*COMECO DO SWITCH */
    switch(mes) {
    case 1: 
    dias=31;
    printf("--JANEIRO--\n");
    printf("Janeiro tem %d dias \n",dias);
    struct aniversario a1;
    strcpy(a1.nome,"Jose Silva");
    strcpy(a1.telefone,"11 99568450");
    strcpy(a1.data,"12/21/1956");
    strcpy(a1.email,"jose.silva.at.gmail.com");
    printf("--ANIVERSARIOS--\n");
    printf("Nome: %s \n", a1.nome);
    printf("Telefone: %s \n", a1.telefone); 
    printf("Email: %s \n", a1.email);
    printf("Dia: %s \n", a1.data); 
    break;
    case 2:
        if(ano%4==0) {
        dias=29;
        }
        else {
        dias=28;
        }
    printf("--FEVEREIRO--\n");
    printf("Fevereiro tem %d dias \n",dias);
    break;
    case 3:
    dias=31;
    printf("--MARCO--\n");
    printf("Marco tem %d dias \n",dias);
    break;
    case 4:
    dias=30;
    printf("--ABRIL--\n");
    printf("Abril tem %d dias \n",dias);
    break;
    case 5:
    dias=31;
    printf("--MAIO--\n");
    printf("Maio tem %d dias \n",dias);
    break;
    case 6:
    dias=30;
    printf("--JUNHO--\n");
    printf("Junho tem %d dias \n",dias);
    break;
    case 7:
    dias=31;
    printf("--JULHO--\n");
    printf("Julho tem %d dias \n",dias);
    break;
    case 8:
    dias=31;
    printf("--AGOSTO--\n");
    printf("Agosto tem %d dias \n",dias);
    break;
    case 9:
    dias=30;
    printf("--SETEMBRO--\n");
    printf("Setembro tem %d dias \n",dias);
    break;
    case 10:
    dias=31;
    printf("--OUTUBRO--\n");
    printf("Outubro tem %d dias \n",dias);
    break;
    case 11:
    dias=30;
    printf("--NOVEMBRO--\n");
    printf("Novembro tem %d dias \n",dias);
    break;
    case 12:
    dias=31;
    printf("--DEZEMBRO--\n");
    printf("Dezembro tem %d dias \n",dias);
    break;
    default: 
    printf("Opcao invalida. ");
    break;
    /*FIM DO SWITCH */
}
}

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
char nome[60],telefone[11],email[70],data[8];

O compilador informa que essas variáveis não estão sendo utilizadas.

 

Mas sobre a mistura de valores, o que realmente está acontecendo? O programa está rodando normalmente aqui.

 

Agora que vi que está mostrando o telefone e email juntos. Padronizei os valores dentro da estrutura em 30 caracteres e agora funciona. Teste aí também.

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 horas atrás, allanxd disse:

char nome[60],telefone[11],email[70],data[8];

O compilador informa que essas variáveis não estão sendo utilizadas.

 

Mas sobre a mistura de valores, o que realmente está acontecendo? O programa está rodando normalmente aqui.

 

Agora que vi que está mostrando o telefone e email juntos. Padronizei os valores dentro da estrutura em 30 caracteres e agora funciona. Teste aí também.

@allanxd no meu, essa parte não da erro, mas o valor telefone se confunde com o do email, não sei porque...estou usando o dev c++ (preciso usar esse)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá todos!

 

 

Porque o tanho é pequeno para caber, por causa de 1 caractere que está faltando.

Observe o que disse @allanxd quando adicionou largura 30 para todos os vetores char. Funcionou!

 

19 horas atrás, camilamaste disse:

 strcpy(a1.telefone,"11 99568450");

A largura da string é de 11 caracteres, e faltou +1 para o caractere de final, pois strings usam um char de valor 0 para finalizar a palavra: ["11 99568450"] == ['1','1',' ', '9',9','5','6','8','4','5','0','\0'], ou seja, o tamanho de telefone é 12 e não 11. O mesmo erro se ver em data ...

 

O.k!

  • Curtir 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

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

×