Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Boa noite, estou tendo dificuldade pra resolver um exercício pois usa string em switch/case, questão no caso é essa: 

Construa um programa que receba um inteiro e o envie para uma FUNÇÃO. Utilizando SWITCH/CASE verificar qual o dia da semana correspondente. Sendo 1 para domingo, 2 para segunda, 3 para terça, etc. Após fazer a verificação o programa deve RETORNAR o resultado e este deve ser impresso no programa principal .

 

Fiz um código já mas ele está repetindo na hora de printar sem finalizar programa com a impressão da resposta.

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

char verif(int n){
    int x;
    char y[7];
    switch (x){
        case '1':
        strcpy( y, "Domingo");break;
        case '2':
        strcpy( y, "Segunda");break;    
        case '3':
        strcpy( y, "Terça");break;   
        case '4':
        strcpy( y, "Quarta");break;   
        case '5':
        strcpy( y, "Quinta");break;   
        case '6':
        strcpy( y, "Sexta");break;   
        case '7':
        strcpy( y, "sábado");break;   
    }
  printf ("%s", y);  
    return y;
}


main ()
{
    int n;

    printf("De 1 a 7, digite semana que você deseja ver:");
    scanf ("%d", &n);
    verif (n);
    
    printf ("Dia da semana: %s", verif(n));
    
    return 0;
}

 

  • Amei 1
Postado

x é desnecessário porque o parâmetro é n. A impressão acontece somente fora  e não dentro-e-fora do escopo da função verifica.

 

Um retorno acontece de duas maneiras: parâmetro de saída ou fim de escopo.

No caso de fim de escopo fica assim:

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

char * verif(int n){
    static char y [8] = {'\000'};
    switch (n){
        case 1:strcpy( y, "Domingo"); break;
        case 2:strcpy( y, "Segunda"); break;    
        case 3:strcpy( y, "Terça");   break;   
        case 4:strcpy( y, "Quarta");  break;   
        case 5:strcpy( y, "Quinta");  break;   
        case 6:strcpy( y, "Sexta");   break;   
        case 7:strcpy( y, "sábado");  break;
        default: y [0] = '\000';
    }
    return y;
}


int main(void){
    int n;

    printf("De 1 a 7, digite semana que você deseja ver: ");
    scanf ("%d", &n);
    
    printf("Dia da semana: %s", verif(n));
    
    return 0;
}

 

  • Curtir 1
  • Obrigado 2
Postado
15 horas atrás, Vulgo_Lobo disse:

Após fazer a verificação o programa deve RETORNAR o resultado e este deve ser impresso no programa principal

 

Pois é: você deve retornar o resultado a ser impresso

 

15 horas atrás, Vulgo_Lobo disse:

Sendo 1 para domingo, 2 para segunda, 3 para terça

 

O enunciado não está assim uma beleza. mas o resultado é "domingo" para 1,  "segunda" para 2 e assim por diante. É isso que você deve retornar.

 

No entanto declarou

char verif(int n);

que retorna só uma letrinha.

 

Pode retornar um ponteiro para char simplesmente.

 

Porque só o sábado começa com minúscula?

case 7:strcpy( y, "sábado");  break;

Evite usar acentos se não for obrigado. Eles não saem em todas as máquinas a menos que você faça uma série de coisas, no mínimo usando setlocale() para definir a região e mudando a página de código da console para alguma que tenha os acentos da língua portuguesa. E educadamente restaurando como estava ao final do seu programa.

 

Muito esforço para um simples exercício de switch. O comando se chama switch, apenas switch. Não sei de onde vem essa gíria de switch/case, mas não está nos livros. Ao menos não em algum que eu já tenha lido.

 

Uma parte do padrão

image.png.fc9cee5371993017fdd7346bb8f0deee.png

 

Onde se vê o comando switch() e a notação de label para o case. Porque a cláusula case é um prefixo para um label, como você poderia escrever em seu programa


	reinicia:
		// código
		...
		...
		if(condicao) goto reinicia;
		...

De volta ao seu programa:

 

image.png.cc12e4ec5d80c37b3bc98c63e63277c7.png

 

Note que você chama duas vezes a função por engano.

 

E a mensagem está errada:
 

image.png.2ad908727f0a245689e76cfd593a2fdc.png

 

não é a "semana" mas sim o correspondente dia da semana em relação ao número digitado. Talvez deva mudar a redação...

 

Deixe um espaço ao menos entre o prompt e a leitura... Fica mais fácil de ler a mensagem sem o cursor em cima da letra

Compare: 
 

image.png.6e38c128ca5685409aa493b5d5cb112c.png


Ou

 

image.png.d9883ecb5c515d339a32257d78f19d5d.png
 

E veja que é muito mais fácil de ler o que você digitou no segundo caso.
 

main() deve ser a primeira função de seu programa. Isso vai ajudar você e outros que forem ler seus programas. E é prática recomendada --- ou obrigada --- em muitos empregos e escolas.

 

Veja um exemplo abaixo, possivelmente bem mais simples, de como escrever esse exercício sem chamar outras funções ou duplicar código

#include <stdio.h>

char* verif(int);

main(void)
{
    int n;
    printf("\nDe 1 a 7, digite o dia da semana que voce deseja ver: ");
    int res = scanf("%d", &n);
    if (res != 1) return -1;
    printf("Dia da semana: %s\n", verif(n));
    return 0;
};  // main()

char* verif(int n)
{
    static char os_dias[7][8] = {
        "Domingo", "Segunda", "Terca",
        "Quarta",  "Quinta",  "Sexta",
        "sábado" };
    switch (n)
    {
    case 1:    case 2:    case 3:
    case 4:    case 5:    case 6:
    case 7:
        return (char*) os_dias[n-1];
    };  // switch()
    return 0;
};  // verif()

 

 

 

  • Obrigado 2
Postado

🤔:( Eu copiei o código de seu programa, claro, e esqueci de trocar "sábado" por "sábado" :) 

adicionado 1 minuto depois
8 horas atrás, arfneto disse:

Onde se vê o comando switch() e a notação de label para o case. Porque a cláusula case é um prefixo para um label, como você poderia escrever em seu programa

 

Isso quer dizer que switch é um comando, e case é um tipo especial de label. E switch/case não é nada.

  • Curtir 1
  • Obrigado 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...