Ir ao conteúdo

C Programa de limpeza de casas


Ir à solução Resolvido por arfneto,

Posts recomendados

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

/*Função principal, responsável por chamar as demais funções abaixo*/
int main() {
  float metragem, tipo, adicional, resultado;
  
  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n");
  printf ("**************************************************************************\n");
  printf ("----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  int metragem_limpeza();
  metragem = metragem_limpeza();

  printf("**************************************************************************\n");
  printf ("----------------------Menu 2 de 3 - Tipo Limpeza----------------------\n");
  float tipo_limpeza();
  tipo = tipo_limpeza();

  printf("**************************************************************************\n");
  printf("-------------------Menu 3 de 3 - Adicional de Limpeza---------------------\n");
  int adicional_limpeza();
  adicional = adicional_limpeza();

  resultado=metragem*tipo+adicional;
  printf("O valor final foi de R$%g", resultado);

}


/*Função abaixo que calcula a metragem da limpeza (metragem_limpeza) */
int metragem_limpeza() {
  float met;
  
  while(1) {
    printf("Entre com a metragem da casa: \n");
    scanf("%f", &met);
    if (met<30) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
      continue;
    }
    else if (met>700) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
      continue;
    }
    else if (met<=300) {
      return 60+0.3*met;
      
    }
    else if (met<=700) {
      return 120+0.5*met;
      
    }
    
  }
  

  
}


/*Função abaixo que atribui o tipo da limpeza (tipo_limpeza) */
float tipo_limpeza() {
  char tip;
  printf("Entre com o tipo de limpeza:\n");
  printf("Básica (B): Aplicada para sujeira semanais ou quinzenais.\n");
  printf("Completa (C): (+30 p/ cento): Indicada para sujeiras antigas ou não rotineiras.\n");
  scanf(" %c", &tip);
  if (tip=='B') {
    return 1.0;
  }
  else if (tip=='C') {
    return 1.3;
  }
  
}


/*Função abaixo que calcula algum adicional (adicional_limpeza) */
int adicional_limpeza() {
  int adi, add;
  adi=0;
  printf("Deseja mais algum adicional?\n");
  printf("0 - Não desejo mais nada. Encerrar.\n");
  printf("1 - Passar 10 peças de roupas. R$10,00\n");
  printf("2 - Limpeza de 1 Forno/Microondas. R$12,00\n");
  printf("3 - Limpeza de 1 Geladeira/Freezer. R$20,00\n");
  while(1) {
  printf("Digite o valor: \n");
  scanf("%d", &add);
  if (add==0) {
    adi = adi+0;
    break;
  }
  else if (add==1) {
    adi = adi+10;
    continue;
  }
  else if (add==2) {
    adi = adi+12;
    continue;
  }
  else if (add==3) {
    adi = adi+20;
    continue;
  }
    
  }

  return adi;
  

}

Sou bem iniciante em C, eu gostaria que vcs opinassem sobre o que posso melhorar em meu programa. Ele foi desenvolvido originalmente em Python que fiz pra um trabalho da faculdade, agora passei pra C.  

  • Curtir 1
  • Solução
Postado

Meu palpite grátis:

 

Evite esse tipo de comentário:
 

/*Função principal, responsável por chamar as demais funções abaixo*/
int main() {


Comente o que está fazendo ou porque está fazendo deste modo

 

Seu programa tem muitos erros ainda.

 

  • Deixe os protótipos FORA de main().
  • Se metragem_limpeza() retorna um int porque calcula em um float?
  • Teste o retorno de scanf(). É ingênuo não testar e seguir cegamente em frente.
  • 2 printf() de uma linha são dezenas de vezes mais lerdos que um printf() de suas linhas. E se não vai formatar nada não use printf e sim puts().
  • Evite esses comentários com  /* */ e use o mais prático //

 

 

  • Curtir 1
  • Obrigado 2
Postado

@arfneto Obrigado pela ajuda, vou aderir suas dicas. Em relação a seu 3° ponto: Eu testei o retorno do scanf(), aí vi que estava certo, e apaguei essas linhas e publiquei no site.

@arfneto De fato, ele estar retornando em INT e não em FLOAT na metragem_limpeza() quebrou completamente meu código.

  • Curtir 2
Postado
4 horas atrás, Endmmans disse:

Em relação a seu 3° ponto: Eu testei o retorno do scanf(), aí vi que estava certo, e apaguei essas linhas e publiquei no site.

 

Que significa?

 

A cada vez que postar aqui sobre esse programa poste o código como está no momento ou ninguem vai poder ajudar muito...

 

3 horas atrás, Endmmans disse:

Como faço para colocar os protóticos pra FORA da função main()? Só devo colocar pra fora os dessa função?

 

protótipos só existem fora de funções. Ao colocar a chamada dentro o compilador vai tentar resolver e supor que é uma função que retorna int e chamar. Como você não fez nada com o resultado de uma al chamada o valor simplesmente some, como aqui na linha 10

 

    int metragem_limpeza();
    metragem = metragem_limpeza();

 

Ainda sobre o programa

 

Nunca escreva isso:
 

    float metragem, tipo, adicional, resultado;

 

sempre vai cair na sua cabeça. Inicialize todas as variáveis.

 

Por exemplo escreva

 

    printf("----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
    float metragem = metragem_limpeza();

//...

 

 

  • Curtir 1
Postado

@arfneto

21 minutos atrás, arfneto disse:
float metragem = metragem_limpeza();

Eu apaguei aquela linha ''float metragem, tipo, adicional, resultado;'', porém agora a função metragem_limpeza() não é executada. o que fiz de errado? Segue a parte do código:

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


int main() {

  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n**************************************************************************\n----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  float metragem = metragem_limpeza();

 

  • Curtir 1
Postado

@Endmmans seu programa é bem pequeno. poste algo que se possa compilar, a versão atual, como já te expliquei

51 minutos atrás, Endmmans disse:

apaguei aquela linha ''float metragem, tipo, adicional, resultado;'', porém agora a função metragem_limpeza() não é executada. o que fiz de errado?

 

O que fez de errado foi apagar aquela linha. Não mude uma letra que seja sem ter uma razão definida.

 

Você apagou uma declaração de 4 variáveis. Que pretendia?

  • Curtir 1
Postado

Vou reescrever o programa com as correções da maneira que entendi, já mando.

@arfneto Ficou assim: 

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

int adicional_limpeza(), adicional;
float metragem_limpeza(), tipo_limpeza(), metragem, tipo, resultado;
 
int main() {
  
  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n**************************************************************************\n----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  float metragem = metragem_limpeza();
  printf("O valor retornado foi de %g\n", metragem); //Verificar se o valor retornado está correto//

  printf("**************************************************************************\n------------------------Menu 2 de 3 - Tipo Limpeza------------------------\n");
  float tipo = tipo_limpeza();
  printf("O valor retornado foi de %g\n", tipo); //Verificar se o valor retornado está correto//

  printf("**************************************************************************\n-------------------Menu 3 de 3 - Adicional de Limpeza---------------------\n");
  int adicional = adicional_limpeza();
  printf("O valor retornado foi de %d\n", adicional); //Verificar se o valor retornado está correto//

  float resultado=metragem*tipo+adicional;
  printf("O valor final foi de R$%g\n", resultado);

}


//Função abaixo que retorna o valor da metragem da limpeza (metragem_limpeza) //
float metragem_limpeza() {
  float met;
  
  while(1) {
    printf("Entre com a metragem da casa: \n");
    scanf("%f", &met);
    
    if (met<30 || met>700) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
      continue;
    }

    else if (met<=300) {
      return 60+0.3*met;
      
    }
    else if (met<=700) {
      return 120+0.5*met;
      
    }
    
  }
  

  
}


//Função abaixo que retorna o valor do tipo de limpeza (tipo_limpeza) //
float tipo_limpeza() {
  char tip;
  printf("Entre com o tipo de limpeza:\nBásica (B): Aplicada para sujeira semanais ou quinzenais.\nCompleta (C): (+30 p/ cento): Indicada para sujeiras antigas ou não rotineiras.\n");
  scanf(" %c", &tip);
  if (tip=='B') {
    return 1.0;
  }
  else if (tip=='C') {
    return 1.3;
  }
  
}


//Função abaixo que retorna o valor de algum adicional (adicional_limpeza) //
int adicional_limpeza() {
  int adi, add;
  adi=0;
  printf("Deseja mais algum adicional?\n0 - Não desejo mais nada. Encerrar.\n1 - Passar 10 peças de roupas. R$10,00\n2 - Limpeza de 1 Forno/Microondas. R$12,00\n3 - Limpeza de 1 Geladeira/Freezer. R$20,00\n");
  while(1) {
  printf("Digite o valor: \n");
  scanf("%d", &add);
  if (add==0) {
    adi = adi+0;
    break;
  }
  else if (add==1) {
    adi = adi+10;
    continue;
  }
  else if (add==2) {
    adi = adi+12;
    continue;
  }
  else if (add==3) {
    adi = adi+20;
    continue;
  }
    
  }

  return adi;
  

}

 

  • Curtir 1
Postado

@Endmmans Está melhor agora, mas introduziu novos erros...

 

22 horas atrás, Endmmans disse:

Eu testei o retorno do scanf(), aí vi que estava certo, e apaguei essas linhas e publiquei no site.

 

E agora onde está a parte do programa em que testa o retorno das chamadas de scanf?

 

2 horas atrás, Endmmans disse:
int adicional_limpeza(), adicional;
float metragem_limpeza(), tipo_limpeza(), metragem, tipo, resultado;

 

E para que declarou essas variáveis fora de main e com o MESMO NOME das que estão declaradas dentro de main e das quais nem precisava, nem dentro nem fora?

 

metragem_limpeza() está ruim ainda. Não precisa de um else depois de coisas definitivas como continue ou return. Só fica mais difícil de ler. Não use.

 

E  adicional_limpeza() devia retornar float afinal, porque vai entrar num expressão float e é de todo modo um adicional em dinheiro.

 

Evite conversões implícitas. Uma constante float termina com F e uma constante float ou double tem um ponto. Use.

  • Curtir 1
Postado

@Endmmans Você declarou de novo todas as variáveis, fora de main. Isso as torna globais e 

e muito, mas muito ruim mesmo. Só dá problema e é proibido em toda parte, escolas e empresas. E de todo modo no único lugar em que as usa declarou de novo então serão outras com o mesmo nome e as globais vão sumir em main...

 

Veja o que fez com metragem:

 

//...

float metragem_limpeza(), tipo_limpeza(), metragem, tipo, resultado;
 
int main() {
  
  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n**************************************************************************\n----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  float metragem = metragem_limpeza();

 //...

 

 

Não declare mais que uma variável por linha. É grátis e economizar essas linhas não ajuda em nada. Só atrapalha.

Entenda que // indica comentario até o final da linha. Não precisa e não deve finalizar ou não faria diferença com /**/

Não pule de linha antes de ler um valor. Ninguém espera isso. Deixe o cursor na mesma linha . . .

Se usa "ou" na mensagem use ou na condição também...

 

        if (met < 30) {
            printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
            continue;
        }
        else if (met > 700) {
            printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
            continue;
        }

 

E pela lógica o segundo teste é supérfluo. É claro que não é maior que 700 porque já testou isso.

 

Não sou eu quem vai corrigir seu trabalho 🙂 mas atente para essas coisas todas.

Postado

@arfneto @arfneto Olá, dei uma editada brusca no programa da maneira que entendi e que consegui. Agora coloquei as funções antes da main, dessa, forma já aproveitando e as declarando.

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

//Função que retorna o valor calculado da limpeza pela metragem. Não aceita valores menor do que 30 ou maior do que 700.
float metragem_limpeza() {
  float met;
  
  while(1) {
    printf("Entre com a metragem da casa: \n");
    scanf("%f", &met);
    
    if (met<30 || met>700) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
      continue;
    }

    else if (met<=300) {
      return 60+0.3*met;
      
    }
    else if (met<=700) {
      return 120+0.5*met;
      
    }
    
  }
    
} 

//Função que retorna o valor do tipo de limpeza. Irá multiplicar o resultado final por 1.0 ou 1.3
float tipo_limpeza() {
  char tip;
  printf("Entre com o tipo de limpeza:\nBásica (B): Aplicada para sujeira semanais ou quinzenais.\nCompleta (C): (+30 p/ cento): Indicada para sujeiras antigas ou não rotineiras.\n");
  scanf(" %c", &tip);
  if (tip=='B') {
    return 1.0;
  }
  else if (tip=='C') {
    return 1.3;
  }
  
}

//Função que retorna o valor dos adicionais da limpeza. Irá somar com o resultado final.
float adicional_limpeza() {
  float adi;
  float add;
  adi=0;
  printf("Deseja mais algum adicional?\n0 - Não desejo mais nada. Encerrar.\n1 - Passar 10 peças de roupas. R$10,00\n2 - Limpeza de 1 Forno/Microondas. R$12,00\n3 - Limpeza de 1 Geladeira/Freezer. R$20,00\n");
  while(1) {
  printf("Digite o valor: \n");
  scanf("%f", &add);
  if (add==0) {
    adi = adi+0;
    break;
  }
  else if (add==1) {
    adi = adi+10;
    continue;
  }
  else if (add==2) {
    adi = adi+12;
    continue;
  }
  else if (add==3) {
    adi = adi+20;
    continue;
  }
    
  }

  return adi;
  

}

//Programa principal
int main() {
  
  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n**************************************************************************\n----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  float metragem = metragem_limpeza();
  printf("O valor retornado foi de %g\n", metragem); //Verificar se o valor retornado está correto

  printf("**************************************************************************\n------------------------Menu 2 de 3 - Tipo Limpeza------------------------\n");
  float tipo = tipo_limpeza();
  printf("O valor retornado foi de %g\n", tipo); //Verificar se o valor retornado está correto

  printf("**************************************************************************\n-------------------Menu 3 de 3 - Adicional de Limpeza---------------------\n");
  float adicional = adicional_limpeza();
  printf("O valor retornado foi de %g\n", adicional); //Verificar se o valor retornado está correto

  float resultado=metragem*tipo+adicional;
  printf("O valor final foi de R$%g\n", resultado);

  return 0;

}

 

  • Obrigado 1
Postado
30 minutos atrás, Endmmans disse:

Olá, dei uma editada brusca no programa da maneira que entendi e que consegui. Agora coloquei as funções antes da main, dessa, forma já aproveitando e as declarando.

 

Talvez você aproveitasse melhor a oportunidade do forum perguntando coisas objetivas ao invés de mudar coisas sem mostrar o critério.

 

O programa continua com muitos dos problemas de antes. E erros. Alguns eu te expliquei mais de uma vez e você nada fez.

 

Não tem nenhum sentido declarar as funções antes. Todo o sentido dos protótipos é não precisar fazer isso.

 

Você tem um livro?  Seu curso adota um livro? Você faz um curso?

 

Veja um exemplo de como por exemplo metragem_limpeza() podia ser mais simples e legível:
 

float metragem_limpeza_b() {
  printf(
      "----------------------Menu 1 de 3 - Metragem "
      "Limpeza----------------------\n");
  float met = 0.;
  while (1) {
    printf("\n\tEntre com a metragem da casa: ");
    int res = scanf("%f", &met);
    if (res != 1) continue;
    if ((met < 30) || (met > 700)) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m².\n");
      continue;
    }
    if (met <= 300.f) return 60.f + 0.3f * met;
    return 120.f + 0.5f * met;
  }
}

 

 

  • Obrigado 1
Postado

@arfneto Desculpe pelas confusões, sou bem iniciante mesmo e estou treinando C pra um possível estágio. Mas o que seriam protótipos exatamente? Seria eu por exemplo colocar fora das funções no início de tudo (antes da main) ''float metragem_limpeza()''? 

  • Obrigado 1
Postado
1 hora atrás, arfneto disse:

Você tem um livro?  Seu curso adota um livro? Você faz um curso?

 

12 minutos atrás, Endmmans disse:

Desculpe pelas confusões, sou bem iniciante mesmo e estou treinando C pra um possível estágio. Mas o que seriam protótipos exatamente? Seria eu por exemplo colocar fora das funções no início de tudo (antes da main) ''float metragem_limpeza()''? 

 

Os prototipos servem para avisar ao compilador sobre os parâmetros e retorno das funções que vem a seguir. 

 

Assim  não é preciso ter o fonte logo a seguir ou no mesmo arquivo.

 

Veja o caso das funções como scanf() e printf() que você usa sem ter o código delas. Os protótipos estão em stdio.h que você incluiu e então o compilador sabe o que fazer quando vê uma chamada dessas no programa. E na hora de criar o programa executável o sistema tem o código delas em arquivos especiais convenientemente chamados de bibliotecas...

  • Obrigado 2
Postado

@Endmmans ao menos leu o exemplo que te mandei no tópico #13? Penso que não, afinal é o que está lá...

Não respondeu ao que te perguntei...

9 horas atrás, arfneto disse:

Você tem um livro?  Seu curso adota um livro? Você faz um curso?

 

  • Obrigado 1
Postado

@arfneto Na verdade eu aprendi base de Python em um curso do ano passado, e agora estou tentando aprender C pra eu não ter tanta dificuldade em outras linguagens. C estou aprendendo totalmente por fora, não tenho nenhum livro e não faço curso sobre ele.

15 horas atrás, arfneto disse:
if (res != 1) continue;

Esse é o teste do retorno do scanf? Pra que ele serve exatamente?

  • Curtir 1
Postado
6 horas atrás, arfneto disse:

ao menos leu o exemplo que te mandei no tópico #13? Penso que não, afinal é o que está lá...

Não respondeu ao que te perguntei...

16 horas atrás, arfneto disse:

Você tem um livro?  Seu curso adota um livro? Você faz um curso?

 

Pois é.

 

Você tem um livro? voce faz um curso?

Você tem um manual? Qual seu método para aprender isso?

 

C nada tem a ver com Python. São muito diferentes. Como C++ é muito diferente.

 

scanf() retorna -1 para erro, ou um valor dizendo o total de especificadores que conseguiu ler. Pode não ler nada e não é um erro.

 

Pelo nome dá pra imaginar que scanf() é um scanner.

 

Especificador é aquilo que começa por '%' e não por "%%". 

 

Então

 

  float met = 0.;
  int res = scanf("%f", &met);
  if (res != 1) continue;

 

Se tem um especificador só pode retornar -1,0 ou 1. 

 

 

  • Obrigado 1
Postado

@arfneto Eu devo verificar SEMPRE se o retorno de scanf é 1, mesmo fora de laços de repetição?

@arfneto Não tenho nenhum livro sobre C e não faço cursos sobre C. você acha que é útil eu aprender melhor C para caso surjam oportunidades de estágio? Ou acha que não vale a pena? Visto que essa linguagem quase não é usada comercialmente.

  • Curtir 1
Postado
7 minutos atrás, Endmmans disse:

Eu devo verificar SEMPRE se o retorno de scanf é 1, mesmo fora de laços de repetição?

 

Que tem a ver com laços de repetição?

O retorno tem a ver com o numero de especificadores.

Sua lógica vai dizer se precisa testar. O simples é: se não for importante saber se leu algo ou se deu erro não teste... Nos outros casos...

 

10 minutos atrás, Endmmans disse:

Não tenho nenhum livro sobre C e não faço cursos sobre C. você acha que é útil eu aprender melhor C para caso surjam oportunidades de estágio? Ou acha que não vale a pena? Visto que essa linguagem quase não é usada comercialmente.

 

O que posso te dizer é que sistemas são escritos em C e C++. Em software embarcado quase tudo é C. Windows foi escrito em C e C++. MacOS foi escrito em C e C++, Linux que um dia foi Unix foi escrito em C e C++ bem como o Android. Apple usa Objective C no IOS e aposto que o C de Objective C não é de Python ou java.

 

Software para o mercado financeiro e jogos é praticamente todo escrito em C++ quando precisa de performance. E sempre precisa.

 

E aprender melhor ainda estaria bem adiante de um programa com 4 funções.

Ainda sobre o programa, a lógica de metragem_limpeza() estaria errada também em Python, COBOL ou FORTRAN

  • Obrigado 1
Postado

@arfneto O que eu sei fazer é basicamente este programa que você viu. você acha que devo estudar beeem mais antes de iniciar um estágio? Talvez apareça um em breve, mas acho que ainda tenho que aprender muito.

  • Curtir 1
Postado

@Endmmans Meu palpite: continue escrevendo programas. Muitos programas. Em C ou Python ou qualquer coisa. Escreva os mesmos em mais de uma linguagem.

 

Arrume esse programa por exemplo. E compre algum livro com aplicações da linguagem, algoritmos, estrutura de dados, essas coisas.

  • Curtir 1
Postado

@arfneto Se me chamarem pra um estágio já agora você acha que devo aceitar ou recusar por enqto com base no que você viu?

@arfneto Eu não tinha entendido alguns conceitos que você me disse e dei uma pesquisada. Adicionei os detalhes ao programa que compreendi.

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

float metragem_limpeza();
float metragem_limpeza_b();
float tipo_limpeza();
float adicional_limpeza();

//Programa principal
int main() {
  
  printf("Bem-vindo ao programa de Serviços de Limpeza CleanUp.\n**************************************************************************\n----------------------Menu 1 de 3 - Metragem Limpeza----------------------\n");
  float metragem = metragem_limpeza();
  if (metragem ==0) {
    return 0;
  }
  printf("O valor retornado foi de %g\n", metragem); //Verificar se o valor calculado está correto

  printf("**************************************************************************\n------------------------Menu 2 de 3 - Tipo Limpeza------------------------\n");
  float tipo = tipo_limpeza();
  printf("O valor retornado foi de %g\n", tipo); //Verificar se o valor calculado está correto

  printf("**************************************************************************\n-------------------Menu 3 de 3 - Adicional de Limpeza---------------------\n");
  float adicional = adicional_limpeza();
  printf("O valor retornado foi de %g\n", adicional); //Verificar se o valor calculado está correto

  float resultado=metragem*tipo+adicional;
  printf("O valor final foi de R$%g\n", resultado);

  return 0;

}

//Função que retorna o valor calculado da limpeza pela metragem. Não aceita valores menor do que 30 ou maior do que 700.
float metragem_limpeza() {
  float met;
  
  while(1) {
    printf("Entre com a metragem da casa: \n");
    float ret_scanf = scanf("%f", &met);
    if (ret_scanf != 1) { //Verifica se o valor de scanf deu certo.
      printf("Só são aceitos valores numéricos. Tente novamente.\n");
      while (getchar() != '\n'); //Limpa o buffer do teclado.
      continue;
    }
    
    if (met<30 || met>700) {
      printf("Não aceitamos casas com menos de 30m² ou mais de 700m². Sentimos muito.\n");
      return 0;
    }

    if (met<=300) {
      return 60+0.3*met;
      
    } return 120+0.5*met;

    
  }
    
} 

//Função que retorna o valor do tipo de limpeza. Irá multiplicar o resultado final por 1.0 ou 1.3
float tipo_limpeza() {
  char tip;
  printf("Entre com o tipo de limpeza:\nBásica (B): Aplicada para sujeira semanais ou quinzenais.\nCompleta (C): (+30 p/ cento): Indicada para sujeiras antigas ou não rotineiras.\n");
  while (1) {
  printf("Entre com o tipo de limpeza:\n");  
  char ret_scanf = scanf(" %c", &tip);
   if (ret_scanf != 1) { //Verifica se o valor de scanf deu certo.
     printf("Entrada de dados inválida. Tente novamente\n");
     while (getchar() != '\n'); //Limpa o buffer do teclado.
     continue;
  }
  if (tip=='B') {
    return 1.0;
  }
  else if (tip=='C') {
    return 1.3;
  }
  else {
    printf("Só são aceitos B ou C. Tente novamente.\n");
    continue; 
  }
  }
}

//Função que retorna o valor dos adicionais da limpeza. Irá somar com o resultado final.
float adicional_limpeza() {
  float adi, add;
  adi=0;
  printf("Deseja mais algum adicional?\n0 - Não desejo mais nada. Encerrar.\n1 - Passar 10 peças de roupas. R$10,00\n2 - Limpeza de 1 Forno/Microondas. R$12,00\n3 - Limpeza de 1 Geladeira/Freezer. R$20,00\n");
  while(1) {
  printf("Digite o valor: \n");
  float ret_scanf = scanf("%f", &add);
    if (ret_scanf != 1) { //Verifica se o valor de scanf deu certo.
      printf("Valor inválido. Tente novamente.");
      while (getchar() != '\n'); //Limpa o buffer do teclado.
      continue;
    }
  if (add==0) {
    adi = adi+0;
    break;
  }
  else if (add==1) {
    adi = adi+10;
    continue;
  }
  else if (add==2) {
    adi = adi+12;
    continue;
  }
  else if (add==3) {
    adi = adi+20;
    continue;
  }
  else {
    printf("Só são aceitos 0, 1, 2 e 3. Tente novamente.\n");
    continue;
  }
    
  }

  return adi;
  

}

 

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