Ir ao conteúdo

Posts recomendados

Postado

  Bom dia pessoal, sou iniciante no C e estou tentando utilizar uma função no main, mas meu resultado esta sendo 0 sempre. o que poderia estar errado? Busquei bastante uma resposta e a única coisa que vi que poderia ser é que ´´seria necessário um return pra cada case``, mas não entendi.

 

O exercício: 

1.      Faça um programa em que o usuário informe o valor da venda e a condição de pagamento conforme o menu abaixo. Através de FUNÇÃO e CASE calcule o total da venda conforme condição de pagamento escolhida. Imprima total na função MAIN:

1 - Venda a Vista - desconto de 10%

2 - Venda a Prazo 30 dias - desconto de 5%

3 - Venda a Prazo 60 dias - mesmo preço

4 - Venda a Prazo 90 dias - acréscimo de 5%

5 - Venda com cartão de débito - desconto de 8%

6 - Venda com cartão de crédito - desconto de 7%.

 

Meu codigo: 

#include <stdio.h>
#include <stdlib.h>
void fatura (float x, int op)
{
    float res;
    switch( op ){
   case 1:
        res = (x - (x * 0.1));
        printf("raiz quadrada: \n %0.2f", res);break;
    case 2:
        res = (x - (x * 0.05));
        printf("Metade: \n %0.2f", res); break;

    case 3:
         res=(x);
         printf("porcentagem do valor: \n %0.2f", res); break;

    case 4:
        res=( x + (x * 0.05));
        printf("O dobro: \n %0.2f", res); break;

    case 5:
        res=( x - (x * 0.08));
        printf("O dobro: \n %0.2f", res); break;

    case 6:
        res=( x - (x * 0.07));
        printf("O dobro: \n %0.2f", res); break;

    default:
        printf("invalido. \n");
    }}


#include <stdio.h>

int main()

{   float x = 0, res = 0;
    int op;

    printf("\n Digite o valor a pagar: \n");
    scanf("%f", &x);
    printf("\n Informe o meio de pagamento :\n 1- A vista \n 2 - Prazo 30 dias \n 3 - Prazo 60 dias \n 4- Prazo 90 dias \n 5 - Cartão de debito \n 6 - Cartão de credito   \n");
    scanf("%d", &op);

    fatura (op,x);
    return 0;

}

   Também tentei deixar só o x nos argumentos da função no main mas não deu certo também, faltam argumentos dai.

  • Curtir 1
Postado
27 minutos atrás, Myles Kennedy disse:

Através de FUNÇÃO e CASE

 

Não existe CASE. O comando aí é chamado switch. Apenas isso: switch. case é o prefixo do label para cada opção do comando. label é qualquer coisa que tenha ': '  depois e é um nome para identificar um ponto do programa.

 

29 minutos atrás, Myles Kennedy disse:

Imprima total na função MAIN:

 

Isso quer dizer que você precisa retornar o valor e não apenas mostrar na função.

 

void fatura (float x, int op){};

 

isso está errado. No geral evite usar void. Isso quer dizer que a função não retorna nada. voce precisa retornar o resultado. Escreva

 

    float fatura (float x, int op);

 

E quando calcular o valor retorne usando...  return.

 

    float fatura (float x, int op){ return 42.42; };

 

Essa função acima está certa e retorna, como deve imaginar, 42.42;

 

Apenas retorne os valores certos nos lugares certos.

 

deixe os comandos break em uma linha separada... Só dificulta as coisas para você deixando grudados lá.

 

 

 

  • Curtir 2
  • Obrigado 1
Postado

@arfneto Cara muito obrigado pela ajuda mais uma vez, só essa parte do return como seria? não consegui pegar muito bem.

 

Obs: Só notei agora que não tinha mudado o texto dentro do switch também, o correto seria "Total a pagar" em todos os casos.

  • Curtir 1
Postado
53 minutos atrás, Myles Kennedy disse:

essa parte do return como seria? não consegui pegar muito bem.

 

Apenas retorne o valor depois de calcular: return valor;

  • Curtir 2
Postado

@Myles Kennedy Tem várias formas de fazer, mas acho que sua função podia ser mais simples, só com o cálculo e sem nenhum print. As informações você pode mostrar em main com o retorno da função. Então poderia ser algo assim,

 

float fatura(int opcao, float valor){
    switch(opcao){
        case 1: return valor * (1 - 0.10);
        case 2: return valor * (1 - 0.05);
        case 3: return valor;
        case 4: return valor * 1.05;
        case 5: return valor * (1 - 0.08);
        case 6: return valor * (1 - 0.07);
    }
    return valor;
}

 

O último return talvez nem precise (já tem o mesmo retorno na opção 3) ou poderia ser -1 p.ex para indicar que nenhuma opção válida foi passada para o primeiro argumento para o caso do seu código não testar as opções antes de entrar na função. Fica a critério do que achar melhor.

  • Curtir 1
  • Obrigado 1
Postado
16 horas atrás, Myles Kennedy disse:

1.      Faça um programa em que o usuário informe o valor da venda e a condição de pagamento conforme o menu abaixo. Através de FUNÇÃO e CASE calcule o total da venda conforme condição de pagamento escolhida. Imprima total na função MAIN:

 

16 minutos atrás, Midori disse:

Tem várias formas de fazer, mas acho que sua função podia ser mais simples, só com o cálculo e sem nenhum print. As informações você pode mostrar em main com o retorno da função

 

Não é uma opção, é um requisito. Está no enunciado postado ;) e é o que significa "Imprima total na função MAIN"

  • Curtir 2
Postado
5 minutos atrás, arfneto disse:

Não é uma opção, é um requisito. Está no enunciado postado ;) e é o que significa "Imprima total na função MAIN"

Não falei do total especificamente... Mas qualquer uma, como as outras informações que ele mostrou como metade, dobro, invalido...

  • Curtir 2

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!