• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

frog

Problema com IF

14 mensagens neste tópico

Ola, como ainda estou no principio de C fiz um programa bem basico uma calculadora para adicionar e para subtrair, em que vcs carregam 1 para advionar e 2 para subtrair o problema e que se eu carregar 1 ou 2 vao os dois para adcionar, vcs sao a minha unica ajuda, como ainda nao tenho a disciplina de Informatica , vou parendendo pela net e por livros aqui vai o codigo:

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

float a , b;
char ch;

int main()
{
 printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >> ");
 scanf("%c" , &ch);

 if (ch=1)
 {
   printf(">>");
   scanf("%f" , &a);
   printf(">>");
   scanf("%f" , &;
   printf("O resultado e: %.2f" , a+;
   printf("\nBy JoAoZaO");
 }

 if (ch=2);
 {
   printf(">>");
   scanf("%f" , &a);
   printf(">>");
   scanf("%f" , &;
   printf("O resultado e: %.2f" , a-b);
 }
 printf("\nBy JoAoZaO");

 system("pause>nul") ;
 return 0;
}

P,S-Peço desculpa, mas nao percebi como se usa o GeSHi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char ch;

.........

....

printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >>  ");

scanf("%c" , &ch);

bem se vais ler o 1 ou 2 recomendo o uso de um inteiro em vez de caracter

if (ch=1)

a igualdade em c é == e nao =, o caracter = esta reservado para a atribuiçao

printf("\nBy JoAoZaO"); 

visto que em qualquer caso vai aparecer porque nao por a seguir aos if's?! ou seja antes do system

bem ch==1 ja nao pode ser 2 logo usa um else if

usar o system("pause"); para parar o programa é uma estupidez pois compremete a portabilidade

espero ter ajudado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado , fiz o que me disseste e deu certo, e decidi por as funçoes de multiplicar e dividir e voltou a dar o mesmo problema! eu so ponho o system("pause"), pq assim logo qe a calculadora der o resultado fecha logo o prog e nem da tempo para ler o resultado! bem o codigo e o seguinte, espero que me ajudem...

#include <stdio.h>
#include <stdlib.h>
float a , b;
char ch;
int main()
{     
printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n >>  ");
scanf("%c" , &ch);

if (ch==1);
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a+b);   
                printf("\nBy JoAoZaO"); 
}

if  (ch==2);
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a-b);   
}

if  (ch==3);
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a*b);   
}
if  (ch==4);
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a/b);   
}

               printf("\nBy JoAoZaO"); 

system("pause>nul") ;
return 0;



} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já para não falar

char ch;

em vez de int ch;

visto que depois so vai armazenar inteiros

ao ler les com %i em vez de %c

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, que erro mais estupido(o das ";" e odo "char"...tenho uma nova duvida, esta calculadora so serve para fazer um calculo, e depois tem que se fechar e voltar a abrir, como e que eu faço para dar para fazer varios calculos, eu acho que tenho que usar o "for" mas nao sei como...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o for é um ciclo no qual conheces o numero de iterações.

Neste caso, o que mais se adequa é um while.

while (ch!='0') {

...

}

de modo que ele vai repetir sempre o menu até ser escolhida a opção 0.

ainda não falaram nisso mas eu refiro, se estás a fazer um menu, e com diversas opções, um "switch.. case" será o mais indicado em vez desses ifs todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

poia mas eu ja tentei com switch...case e nao consegui. o que devo por no no while?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no while põe como já disseram...

while(ch! = '0')
{
/* O código todo que já tens... */
}

Outras notas que me parecem interessantes:

- É uma boa prática declarar as variáveis internamente em vez de teres só variáveis globais, portanto deves declará-las dentro da main, e não fora.

- Como já foi aqui dito várias vezes, se estás a ler números seria melhor a variável ch ser do tipo int em vez de char.

- Se optares pelo char, tens que ter em conta que para comparares com 1, 2, 3 etc, tens que usar plicas, portanto em vez de (ch == 1) deves usar (ch == '1').

- Como também já foi dito, já que tens tantos ifs, era uma boa ideia usares um switch...case. Aqui fica o teu programa alterado para switch...case e com o while:

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

int main()
{     

float a , b;
char ch='-' ; /* inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while */

while(ch != '0')
{
printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>>  ");
scanf("%c" , &ch);

swith(ch)
{
case '1' :
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a+b);   
                break;
}

case '2':
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a-b);   
                break;
}

case '3':
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a*b);   
                break;
}
case '4':
{
printf(">>");
                scanf("%f" , &a);
                printf(">>");
                scanf("%f" , &b);
                printf("O resultado e: %.2f" , a/b);   
                break;
}

default:
{
/* Aqui podes meter uma mensagem de erro que apareça caso seja escolhida uma hipotese inexistente, por exemplo: */
printf("Opcao invalida!!\n");
break;
}
}

               printf("\nBy JoAoZaO"); 

system("pause>nul") ;
return 0;


}   
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelo esclareciento e por te deres dado ao trabalho de pores aqui um codigo!

Comprei um livro de C que disseram que era melhor para iniciantes que se chama Linguagem C de Luis Damas, conhecem no?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, e é muito bom para quem quer começar (opinião pessoal claro)

Sem tentar complicar muito, habitua-te a estruturar o código.

#include <stdio.h>

void somar() {
    float a,b;
    system("cls");
    printf(">>"); scanf("%f",&a);
    printf(">>"); scanf("%f",&b);
    printf("O resultado e: %.2f\n",a+b);
    system("pause");
}
void subtrair() {
    float a,b;
    system("cls");
    printf(">>"); scanf("%f",&a);
    printf(">>"); scanf("%f",&b);
    printf("O resultado e: %.2f\n",a-b);
    system("pause");
}
void multiplicar() {
    float a,b;
    system("cls");
    printf(">>"); scanf("%f",&a);
    printf(">>"); scanf("%f",&b);
    printf("O resultado e: %.2f\n",a*b);
    system("pause");
}
void dividir() {
    float a,b;
    system("cls");
    printf(">>"); scanf("%f",&a);
    printf(">>"); scanf("%f",&b);
    printf("O resultado e: %.2f\n",a/b);
    system("pause");
}
void fim() {
    system("cls");
    printf("By JoAoZaO\n");
    system("pause");
}

int main() {
   int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while
   while(ch!=0) {
            system("cls");
            printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>>  ");
            scanf("%d",&ch);

            switch(ch) {
                       case 1: somar();
                               break;
                       case 2: subtrair();
                               break;
                       case 3: multiplicar();
                               break;
                       case 4: dividir();
                               break;
                       case 0: fim();
            }
   }
   return 0;
}

(sim, compromete-se portabilidade recorrendo ao system, mas não me parece que ele vá transformar aquilo num grande programa que necessita de correr em todos os sistemas operativos e mais alguns. Windows para ele chega.)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, por me responderes.Realmente esse codigo e muito melhor! Mas porque e que eu devo usar esse codigo? Habituo-me melhor á logica?

Aqueles comandos system("..."), sao os comandos de batch?

Este livro e o melhor que eu comprei e mesmo muito bom, para quem ta a iniciar , eu acho o melhor!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, o comando "system" chama um comando da consola. Pause não existe em Linux por exemplo.

Ou então assim

#include <stdio.h>

float somar(float a,float b) {
    return a+b;
}
float subtrair(float a,float b) {
    return a-b;
}
float multiplicar(float a,float b) {
    return a*b;
}
float dividir(float a,float b) {
    return a/b;
}
void fim() {
    system("cls");
    printf("By JoAoZaO\n");
}

int main() {
   int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while
   float a,b;
   while(ch!=0) {
            system("cls");
            printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>>  ");
            scanf("%d",&ch);
            if ((ch>0) && (ch<=4)) {
               system("cls");
               printf(">>"); scanf("%f",&a);
               printf(">>"); scanf("%f",&b);
            }
            switch(ch) {
                       case 1: printf("O resultado e: %.2f\n",somar(a,b));
                               break;
                       case 2: printf("O resultado e: %.2f\n",subtrair(a,b));
                               break;
                       case 3: printf("O resultado e: %.2f\n",multiplicar(a,b));
                               break;
                       case 4: printf("O resultado e: %.2f\n",dividir(a,b));
                               break;
                       case 0: fim();
            }
            system("pause");
   }
   return 0;
}

ou mais pequeno

#include <stdio.h>
void fim() {
    system("cls");
    printf("By JoAoZaO\n");
}
int main() {
   int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while
   float a,b;
   while(ch!=0) {
            system("cls");
            printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>>  ");
            scanf("%d",&ch);
            if ((ch>0) && (ch<=4)) {
               system("cls");
               printf(">>"); scanf("%f",&a);
               printf(">>"); scanf("%f",&b);
            }
            switch(ch) {
                       case 1: printf("O resultado e: %.2f\n",a+b);
                               break;
                       case 2: printf("O resultado e: %.2f\n",a-b);
                               break;
                       case 3: printf("O resultado e: %.2f\n",a*b);
                               break;
                       case 4: printf("O resultado e: %.2f\n",a/b);
                               break;
                       case 0: fim();
            }
            system("pause");
   }
   return 0;
}

Há varias formas de fazer a mesma coisa.

Neste momento "faz-te bem" ler varias formas de programar, para te habituares a várias formas de pensar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei que e bom, mas...Ainda nao parendi muito bem funçoes, quando aprender vou tentar modificar esta calculadora!

Entao  quer dizer que com esse system("...") posso tipo apagar ficheiros e criar, e editar, tal como faria no prompt?

0

Partilhar esta mensagem


Link 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