Ir ao conteúdo
  • Cadastre-se

C BÁSICO EM C Usando STRING em Switch/case e uso da função


Vulgo_Lobo

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

🤔:( 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
Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!