Ir para o conteúdo
Guest Markito

[Resolvido] Não me lê estes programas!

Mensagens Recomendadas

Guest Markito

Continuo a estudar as instruções de control de fluxo... Mas agora já tenho o livro Linguagem C do Luís Damas e o meu estudo já está mais normalizado.

Apesar de já ter lido aqui no fórum que o livro pode estar desatualizado, parece-me um livro muito bem estruturado, com uma evolução muito bem cimentada, e além disso tem exercicios!

Apesar de tudo parece que há programas que não me lêm como estes dois aqui:

/*Escreva um programa que aplique uma taxa de imposto aos soslteiros de 10% e de 9% aos casados*/
#include<stdio.h>
int main()
{
float salario;
char est_civil;
printf("Qual o Salario:"); scanf("%f",&salario);
printf("Qual o estado civil?"); scanf("%c",&est_civil);
if(est_civil=='C'||est_civil=='c')
 printf("Imposto:%.2f\n",salario*0.09);
else
 if(est_civil=='S'||est_civil=='s')
   printf("Imposto:%.2f\n",salario*0.10);
 else
   printf("Estado civil incorrecto!!!");
   return (0);
}

e este:

/*Escreva um programa que calcule o imposto pago por mulheres e por homens, sabendo que as mulheres pagam 10% de imposto e que os homens pagam mais 5% do que as mulheres*/
#include<stdio.h>
main()
{
float salario, imposto=0.0;
char sexo;
printf("Introduza o salario:\n"); scanf("%f",&salario);
printf("Qual o sexo:\n); sexo=getchar();
switch(sexo)
  {
   case 'f':
   case 'F': imposto=0.10;
           break;
   case 'm':
   case 'M': imposto=0.15;
           break;
   }
   printf("Imposto %.2f\n",salario*imposto);
}

Já os corri de lés a lés e parece-me que não falta nada, então... qual é o problema?

O primeiro pede-me o valor do salário e depois disso imprime automáticamente "Estado civil incorrecto!!!"???

Já o 2º diz no Build log 'imposto' is assigned a value that is never used in function main!!!

Gostava de contar com a vossa ajuda sff! Obrigado! :thumbsup:

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

para resolver o primeiro, vou-te apresentar um truque para usares SEMPRE que usas a função scanf ...

/*Escreva um programa que aplique uma taxa de imposto aos soslteiros de 10% e de 9% aos casados*/
#include<stdio.h>

// definição de uma macro que irá limpar tudo que exista no buffer de leitura
#define CLEAR_INPUT (while (getchar() != '\n') /* void */;)

int main()
{
 float salario;
 char est_civil;

 printf("Qual o Salario:");
 scanf("%f",&salario);
 CLEAR_INPUT; // <----- sempre depois de um scanf

 printf("Qual o estado civil?");
 scanf("%c",&est_civil);
 CLEAR_INPUT; // <----- sempre depois de um scanf

 if(est_civil=='C'||est_civil=='c')
   printf("Imposto:%.2f\n",salario*0.09);
 else
 {
   if(est_civil=='S'||est_civil=='s')
     printf("Imposto:%.2f\n",salario*0.10);
   else
     printf("Estado civil incorrecto!!!");
     return (0);
 }

 return 0;
}

----

printf("Qual o sexo:\n); sexo=getchar();
//                     A
//                     |
//                  falta fechar a string
//    (o teu editor não tem syntaxe highlight ?? )

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guest Markito

Boas;

Hippo mesmo assim depois das alterações feitas os programas não saiem correctamente. No caso do 1º programa por exemplo nem me chega a pedir o sexo e o prompt desaparece da tela. Já experimentei ambos no code::blocks e no Dev C++!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Boas;

Hippo mesmo assim depois das alterações feitas os programas não saiem correctamente. No caso do 1º programa por exemplo nem me chega a pedir o sexo e o prompt desaparece da tela. Já experimentei ambos no code::blocks e no Dev C++!

O problema do prompt desaparecer da tela no Dev C++ podes resolver utilizando system("PAUSE"); antes do return 0.

O problema de não te pedir o sexo deve-se ao facto de teres de limpar o buffer como o Hippo referiu.

Comigo o código funciona correctamente em NetBeans, penso que nos outros também funcione.

Tenta este código adaptado para Dev C:

#include <stdio.h>
#include <stdlib.h>
int main() {
/*Escreva um programa que aplique uma taxa de imposto aos soslteiros de 10% e de 9% aos casados*/
float salario;
char est_civil;
printf("Qual o Salario:");
scanf("%f",&salario);
while (getchar() != '\n'); // Pode ser substituido pelo tal Clear_input caso definas como macro
printf("Qual o estado civil?\n");
scanf("%c",&est_civil);
if(est_civil=='C'||est_civil=='c')
 printf("Imposto:%.2f\n",salario*0.09);
else
 if(est_civil=='S'||est_civil=='s')
printf("Imposto:%.2f\n",salario*0.10);
 else
printf("Estado civil incorrecto!!!");
system("PAUSE");  
return 0;
}

Editado por Carlos7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guest Markito

Impecável! Agora sim funciona sem espinhas! Limpinho!

Acho que vou baixar o NetBeans!Já agora o que é que achas do code::blocks? O dev c++ parece ser muito conceituado aqui no forum portanto já nem pergunto.... Mas também se fala muito bem aqui no fórum do NetBeans.

Obrigado agora deu limpinho! :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Carlos7

Impecável! Agora sim funciona sem espinhas! Limpinho!

Acho que vou baixar o NetBeans!Já agora o que é que achas do code::blocks? O dev c++ parece ser muito conceituado aqui no forum portanto já nem pergunto.... Mas também se fala muito bem aqui no fórum do NetBeans.

Obrigado agora deu limpinho! :thumbsup:

Para te ser sincero não gosto muito do DevC, talvez por estar habituado ao NetBeans. O CodeBlocks uso algumas vezes e até é um bom editor, simples e com muitas funcionalidades. Mas sem sombra de dúvidas que eu pessoalmente prefiro o NetBeans, ajuda muito principalmente quem está a iniciar. E lá não precisas disso do system ("PAUSE") :)

Dependendo é do teu sistema operativo podes ter de instalar os compiladores de C depois de instalares o NetBeans mas se precisares ajuda o pessoal cá está :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guest Markito

Para te ser sincero não gosto muito do DevC, talvez por estar habituado ao NetBeans. O CodeBlocks uso algumas vezes e até é um bom editor, simples e com muitas funcionalidades. Mas sem sombra de dúvidas que eu pessoalmente prefiro o NetBeans, ajuda muito principalmente quem está a iniciar. E lá não precisas disso do system ("PAUSE") :)

Dependendo é do teu sistema operativo podes ter de instalar os compiladores de C depois de instalares o NetBeans mas se precisares ajuda o pessoal cá está :P

Obrigado penso que já tenho os compiladores instalados aquando da instalação do code::blocks.

Mas obrigado na mesma pela disponibilidade :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

O DevC++ não é muito conceituado aqui no fórum, apenas entre os membros mais jovens que estão a ter o seu primeiro contacto com as linguagens C/C++.

Na realidade, o DevC++ é um IDE antigo que até incentiva a más práticas de programação e deve, por esse motivo, ser abandonado. O Code::Blocks ou o NetBeans são alternativas imensamente melhores.

No entanto, para quem está a começar (como parece ser o caso), o ideal mesmo é aprender a fazer as coisas manualmente, sem um IDE, ou seja: utilizar um editor de texto decente (ex.: Vim, Emacs, SublimeText 2, Notepad++, ...) e compilar os programas também manualmente, com recurso à linha de comandos.

Uma nota final: system("PAUSE"); é um péssimo hábito.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guest Markito

O DevC++ não é muito conceituado aqui no fórum, apenas entre os membros mais jovens que estão a ter o seu primeiro contacto com as linguagens C/C++.

Na realidade, o DevC++ é um IDE antigo que até incentiva a más práticas de programação e deve, por esse motivo, ser abandonado. O Code::Blocks ou o NetBeans são alternativas imensamente melhores.

No entanto, para quem está a começar (como parece ser o caso), o ideal mesmo é aprender a fazer as coisas manualmente, sem um IDE, ou seja: utilizar um editor de texto decente (ex.: Vim, Emacs, SublimeText 2, Notepad++, ...) e compilar os programas também manualmente, com recurso à linha de comandos.

Uma nota final: system("PAUSE"); é um péssimo hábito.

Eu uso mais o code::blocks e vou descarregar o net beans amanhã mesmo para aproveitar a net da biblioteca Municipal.

Quanto ao system ("pause") já tinha inetriorizado que é uma má prática e no code::blocks até nem foge muito o prompt de comando, só raramente.

uma alternativa ao system("PAUSE")

printf("Carregue no ENTER para continuar");
fflush(stdout);
getchar();

Obrigado por mais essa dica de ouro! São esses pequenos truques que acabam por dar muito jeito e evitam os maus "hábitos" que eu que estou a começar não quero ter.

Obrigado :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.