Ir ao conteúdo

Posts recomendados

Postado

Bom dia !

Estou fazendo o seguinte exercício:

Faca uma funcao que receba a data atual (dia, m ˜ es e ano em inteiro) e exiba-a na tela ˆ no formato textual por extenso. Exemplo: Data: 01/01/2000, Imprimir: 1 de janeiro de 2000.

 

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

char converte(int x){
    char meses[17];
    switch(x){
        case 1 :strcpy(meses,"Janeiro\0");break;
        case 2 :strcpy(meses,"Fevereiro\0");break;
        case 3 :strcpy(meses,"Marco\0");break;
        case 4 :strcpy(meses,"Abril\0");break;
        case 5 :strcpy(meses,"Maio\0");break;
        case 6 :strcpy(meses,"Junho\0");break;
        case 7 :strcpy(meses,"Julho\0");break;
        case 8 :strcpy(meses,"Agosto\0");break;
        case 9 :strcpy(meses,"Setembro\0");break;
        case 10 :strcpy(meses,"Outubro\0");break;
        case 11 :strcpy(meses,"Novembro\0");break;
        case 12 :strcpy(meses,"Dezembro\0");break;
        default :strcpy(meses,"Mes inexistente\0");
    }
    return meses[0];
}

int main(){

    int dia=0;
    int mes=0;
    int ano=0;

    printf("Digita data (dd/mm/aaaa): ");
    scanf("%i/%i/%i",&dia,&mes,&ano);
    setbuf(stdin,NULL);
    printf ("%i de %s de %i",dia,converte(mes),ano);

system("pause");
return 0;
}

porém não esta dando o ultimo printf, como não esta dando erro no compilador não sei onde mexer. 

  • Curtir 1
Postado
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>


int extenso(int *dia, int *mes, int *ano){
	char mes2[9];
        if (*mes==1)strcpy(mes2,"Janeiro");
        if (*mes==2)strcpy(mes2,"Fevereiro");
        if (*mes==3)strcpy(mes2,"Marco");
        if (*mes==4)strcpy(mes2,"Abril");
        if (*mes==5)strcpy(mes2,"Maio");
        if (*mes==6)strcpy(mes2,"Junho");
        if (*mes==7)strcpy(mes2,"Julho");
        if (*mes==8)strcpy(mes2,"Agosto");
        if (*mes==9)strcpy(mes2,"Setembro");
        if (*mes==10)strcpy(mes2,"Outubro");
        if (*mes==11)strcpy(mes2,"Novembro");
        if (*mes==12)strcpy(mes2,"Dezembro");
        
        printf("\n%d de %s de 20%d",*dia,mes2,*ano);
}

int main(){

    int dia,mes,ano;

    printf ("Dia  (");
    scanf("%d",&dia);
    if(dia>31||dia<1){
    	printf("Dia invalido\n");
    	Sleep(2500);
    	system ("cls");
    	return main();
	}
    system ("cls");
    printf ("Mes  (%d /",dia);
    scanf("%d",&mes);
    if(mes>12||mes<1){
    	printf("Mes invalido\n");
    	Sleep(2500);
    	system ("cls");
    	return main();
	}
    system ("cls");
    printf ("Ano  (%d /%d /",dia,mes);
    scanf("%d",&ano);
    if(ano>99||ano<0){
    	printf("Digite apenas os 2 ultimos numeros do Ano\n");
    	Sleep(2500);
    	system ("cls");
    	return main();
	}
    system ("cls");
    printf ("Data (%d /%d /%d)\n",dia,mes,ano);
	
	extenso(&dia,&mes,&ano);
}

 

Postado
1 hora atrás, Jessé P. de Melo disse:

Não posso usar return com variáveis que não sejam numero.

Pode sim.

 

Vamos pelos princípios. Uma string é um vetor de char. Um vetor por sua vez é um ponteiro para o primeiro elemento (no caso das strings, é a primeira letra) que aponta para o próximo elemento.

 

Logo, se você quer retornar uma string, precisa retornar um vetor. Mas para retornar um vetor, precisa retornar um ponteiro. E como o tipo de dado é char, o ponteiro será do tipo char.

 

Segue um exemplo mínimo:

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

char *getMes(int mes);

int main(int argc, char *argv[]) {
    int mes = 5;

    printf("Mes %i e %s \n", mes, getMes(mes));
    return EXIT_SUCCESS;
}

char *getMes(int mes) {
    static char nome[10] = "";

    switch (mes) {
        case 1:
            strcpy(nome, "Janeiro");
            break;
        case 2:
            strcpy(nome, "Fevereiro");
            break;
        case 3:
            strcpy(nome, "Marco");
            break;
        case 4:
            strcpy(nome, "Abril");
            break;
        case 5:
            strcpy(nome, "Maio");
            break;
        case 6:
            strcpy(nome, "Junho");
            break;
        case 7:
            strcpy(nome, "Julho");
            break;
        case 8:
            strcpy(nome, "Agosto");
            break;
        case 9:
            strcpy(nome, "Setembro");
            break;
        case 10:
            strcpy(nome, "Outubro");
            break;
        case 11:
            strcpy(nome, "Novembro");
            break;
        case 12:
            strcpy(nome, "Dezembro");
            break;
        default :
            strcpy(nome, "Invalido");
            break;
    }

    return nome;
}

 

  • Curtir 1
Postado
5 horas atrás, Jessé P. de Melo disse:

Faca uma funcao que receba a data atual (dia, m ˜ es e ano em inteiro) e exiba-a na tela ˆ no formato textual por extenso.

Primeira tarefa é estruturar sua função com 3 parâmetros,  depois uma matriz de string pra decodificação número do mês -- nome do mês ou se preferir continue de switch, por último imprima antes do fim na função.

 

5 horas atrás, Jessé P. de Melo disse:

porém não esta dando o ultimo printf, como não esta dando erro no compilador não sei onde mexer. 

Função responde com retorno, mas desnecessariamente. Siga melhor os requisitos do exame.

 

Bons Estudos

  • Curtir 1
Postado
char converte(int x){
    char meses[17];
    switch(x){
        case 1 :strcpy(meses,"Janeiro\0");break;
        case 2 :strcpy(meses,"Fevereiro\0");break;
        case 3 :strcpy(meses,"Marco\0");break;
        case 4 :strcpy(meses,"Abril\0");break;
        case 5 :strcpy(meses,"Maio\0");break;
        case 6 :strcpy(meses,"Junho\0");break;
        case 7 :strcpy(meses,"Julho\0");break;
        case 8 :strcpy(meses,"Agosto\0");break;
        case 9 :strcpy(meses,"Setembro\0");break;
        case 10 :strcpy(meses,"Outubro\0");break;
        case 11 :strcpy(meses,"Novembro\0");break;
        case 12 :strcpy(meses,"Dezembro\0");break;
        default :strcpy(meses,"Mes inexistente\0");
    }
    return meses[0];
}

 

7 horas atrás, Jessé P. de Melo disse:

Faca uma funcao que receba a data atual (dia, m ˜ es e ano em inteiro) e exiba-a na tela ˆ no formato textual por extenso. Exemplo: Data: 01/01/2000, Imprimir: 1 de janeiro de 2000

 

Seu programa está longe de funcionar ainda. E tem problemas bem básicos. Você tem um livro? uma apostila pelo menos? um site que você segue? Algo assim?

 

Seu enunciado diz o que a função vai receber e tem até um exemplo: "01/01/2000". E aí você escreva uma função converte() que retorna UMA LETRA? Pois é: não vai funcionar. O normal no mundo C seria ela retornar a própria string resultante. Mas está claro no enunciado que é a função que deve exibir o resultado na tela. Então antes de retornar ela deveria executar um printf() e mostrar a data por extenso.

 

  • Você está retornando meses[0], o primeiro valor de uma string de 17 letras. O que acha que tem nessas 17 letras
  • Você está usando strcpy() para copiar seguidamente valores como "Dezembro\0" no mesmo endereço, meses. Então só vai sobrar o último
  • Para que copiar strings cujo valor já é conhecido? Apenas declare no programa. São constantes.

sua função poderia ser 

    void resposta(const char* data);

simplesmente. E você poderia chamar assim sem surpresas

int main()
{
    resposta("01/01/2000");
    return 0;
}

Só precisa da tabela de meses na função e ela pode ser tão simples quanto esse programa de duas linhas

#include "stdio.h"
#include "stdlib.h""

const char meses[12][10] =
{
"janeiro",
"fevereiro",
"marco",
"abril",
"maio",
"junho",
"julho",
"agosto",
"setembro",
"outubro",
"novembro",
"dezembro"
};

int main(int argc, char** argv)
{
	for (int i = 1; i <= 12; i = i + 1) 
		printf("%d: %s\n", i, meses[i-1]);
	return 0;
}

Que mostra

1: janeiro
2: fevereiro
3: marco
4: abril
5: maio
6: junho
7: julho
8: agosto
9: setembro
10: outubro
11: novembro
12: dezembro
    strcpy(meses,"Janeiro\0")
        

Sobre essa chamada a strcpy() entenda que "A" é uma constante em C, do tipo const char* const porque é algo que você não pode mudar. E já inclui o A e um zero no final. Quando você escreve "A\0" está declarando 3 posições: uma com A e DUAS com zero. A notação para uma constante de uma letra é 'A'

 

  • Curtir 1

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