Ir para conteúdo
Fórum Script Brasil
  • 0

Armazenar meses em variavel...


Ervilha

Pergunta

Bom dia, Sou iniciante em C, mas sei programar + ou - bem em vb.

Gostaria de fazer o seguinte em c++

Entre com o dia do nascimento: 10

Entre com o mês de nascimento: 2

Entre com o ano de nascimento: 1986

Você nasceu em: 10 de Fevereiro de 1986.

Em vb consegui fazer facil, mas em c, não consigo gravar os meses dentro da variavel, nem usar o contador no for.

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

using namespace std;
int main(void)
{

// Declaração e Inicialização de Variáveis
    char meses[12];
    int i, dia, ano;
    char resposta = 's';    

// Inicialização de Variáveis
meses[1] = 'Janeiro';
meses[2] = 'Fevereiro';
meses[3] = 'Março';
meses[4] = 'Abril';
meses[5] = 'Maio';
meses[6] = 'Junho';
meses[7] = 'Julho';
meses[8] = 'Agosto';
meses[9] = 'Setembro';
meses[10] = 'Outubro';
meses[11] = 'Novembro';
meses[12] = 'Dezembro';

do
{
// Entrada de Dados    
dia = printf("Entre com o dia do nascimento do aluno:");
scanf("%i",&dia);
meses[i] = printf("\nEntre com o mês do nascimento do aluno:");
scanf("%i",&meses[i]);
ano = printf("\nEntre com o ano do nascimento do aluno:");
scanf("%i",&ano);

// Processamento de Dados
for (i = meses[i]; i = meses[i]; i++)
{
       
// Saida de Dados 
   meses[i] = printf("\nO estudante nasceu em %i de %c de %i" ,dia ,meses[i] ,ano);
}

// Perguntar se Quer Continuar
resposta = printf("\n \nDeseja Continuar S/N?:");
fflush( stdin );
scanf( "\n %c", &resposta );
}while( resposta == 's' || resposta == 'S');
}

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O seu problema é que strings funcionam diferente em C. Na realidade não existe um tipo de string, apenas vetores de caracteres.

O que você fez no código está errado pois, ao declarar uma variável como:

char meses[12];
Você criou um vetor capaz de armazenar 12 caracteres, ou seja, uma única string. O tipo char armazena um caracter e não uma string! Além disso você precisa de reservar um espaço para o byte nulo que é incluído ao final da string para determinar o seu final. O correto no seu caso seria declarar da seguinte forma:
char meses[12][10];
Assim você possui um vetor capaz de armazenar 12 vetores de 10 caracteres cada (9 na realidade devido ao byte nulo). Além disso, diferentemente do VB que aceita tanto aspas simples como duplas para strings, em C você obrigatoriamente deve usar aspas duplas. Aspas simples são para um único caracter. Ou seja: "a" é uma string contendo apenas o caracter a e 'a' é o próprio caracter a. Segue abaixo um código que cria um vetor meses para uso no seu programa:
char meses[12][] = {
  "Janeiro",
  "Fevereiro",
  "Março",
  "Abril",
  "Maio",
  "Junho",
  "Julho",
  "Agosto",
  "Setembro",
  "Outubro",
  "Novembro",
  "Dezembro"
}
Note que no código eu estou criando e inicializando o array de meses de uma só vez. Isso me permite não especificar a última dimensão do array que será escolhida pelo compilador com base nos textos que eu passei como parâmetro. Sobre os printf: esta função envia um texto para o console e retorna o número de bytes escrito, nada que irá importar no seu programa. Simplesmente ignore o valor de retorno. Já no scanf abaixo:
scanf("%i",&meses[i]);
A string de formato é "%i", ou seja, será lido um inteiro. Porém, como parâmetro, foi passada uma posição do vetor meses, ou seja, um char. O correto aqui é passar uma variável do tipo inteiro. Abaixo segue a declaração de um inteiro e seu uso com scanf:
int mes;
scanf("%i", &mes);
Como a variável mes já conterá o número de mês, precisamos apenas usá-la como índice do vetor para retornar o mês, não há a necessidade de um for. Só devemos ter cuidado de checar se o mês passado é válido. Na checagem do while eu acho que fica mais claro se compararmos de outra forma: convertemos a resposta para um caracter maiúsculo e então comparamos apenas com 'S'. Como eu disse, isso é minha opção pessoal! Da forma como estava também estava certo. Por último, main é do tipo int e portanto deve retornar um int: incluia sempre um return 0; no final. A seguir está o código completo com as correções:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>

using namespace std;
int main(void)
{
// Declaração e Inicialização de Variáveis
  int dia, mes, ano;
  char resposta = 's';    
  char meses[12][] = {
    "Janeiro",
    "Fevereiro",
    "Março",
    "Abril",
    "Maio",
    "Junho",
    "Julho",
    "Agosto",
    "Setembro",
    "Outubro",
    "Novembro",
    "Dezembro"
  }

  do {
    // Entrada de Dados    
    printf("Entre com o dia do nascimento do aluno:");
    scanf("%i",&dia);

    printf("\nEntre com o mês do nascimento do aluno:");
    scanf("%i",&mes);

    printf("\nEntre com o ano do nascimento do aluno:");
    scanf("%i",&ano);

// Processamento de Dados
    if(mes<1)
      mes=1;
    else if(mes>12)
      mes=12;

// Saida de Dados
    printf("\nO estudante nasceu em %i de %c de %i" ,dia ,meses[mes] ,ano);

// Perguntar se Quer Continuar
    resposta = printf("\n \nDeseja Continuar S/N?:");
    fflush( stdin );
    scanf( "\n %c", &resposta );
  }while(toupper(resposta) == 'S');

  return 0;
}

Editado por Marcelo Utikawa da Fonseca
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...