Guest Markito Posted February 22, 2013 at 09:04 PM Report #496694 Posted February 22, 2013 at 09:04 PM (edited) 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! 👍 Edited February 22, 2013 at 09:53 PM by thoga31 GeSHi
HappyHippyHippo Posted February 22, 2013 at 09:15 PM Report #496696 Posted February 22, 2013 at 09:15 PM (edited) 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 ?? ) Edited February 22, 2013 at 09:16 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest Markito Posted February 22, 2013 at 09:29 PM Report #496698 Posted February 22, 2013 at 09:29 PM Grande dica! Obrigado! O meu editor deve ter isso de certeza, vou ver se activo. Muito obrigado!
Guest Markito Posted February 23, 2013 at 03:04 PM Report #496740 Posted February 23, 2013 at 03:04 PM 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++!
Carlos7 Posted February 23, 2013 at 03:24 PM Report #496741 Posted February 23, 2013 at 03:24 PM (edited) 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; } Edited February 23, 2013 at 03:26 PM by Carlos7
Guest Markito Posted February 23, 2013 at 07:29 PM Report #496770 Posted February 23, 2013 at 07:29 PM 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! 👍
Carlos7 Posted February 23, 2013 at 08:03 PM Report #496776 Posted February 23, 2013 at 08:03 PM 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! 👍 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á 😛
Guest Markito Posted February 23, 2013 at 09:44 PM Report #496785 Posted February 23, 2013 at 09:44 PM 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á 😛 Obrigado penso que já tenho os compiladores instalados aquando da instalação do code::blocks. Mas obrigado na mesma pela disponibilidade 😛
pwseo Posted February 23, 2013 at 09:44 PM Report #496786 Posted February 23, 2013 at 09:44 PM 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.
HappyHippyHippo Posted February 23, 2013 at 09:51 PM Report #496788 Posted February 23, 2013 at 09:51 PM uma alternativa ao system("PAUSE") printf("Carregue no ENTER para continuar"); fflush(stdout); getchar(); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Guest Markito Posted February 25, 2013 at 11:10 PM Report #497002 Posted February 25, 2013 at 11:10 PM 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 👍
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now