Operações de Calculo em C - Dúvida

JemanPT

Membro
Boas,

Estou a tirar um curso e, neste momento, estamos a dar C...
O prof. deu-nos o seguinte desafio para o fim-de-semana:
"Elaborar um código em C que leia dois números inteiros, uma operação e escreva qual o resultado. Tenham em atenção que não é possível dividir por ZERO."


Pois bem, para introduzir os numeros, pus:

int a, b;
scanf(“%i %i”,&a, &b);

para os calculos, usei a função switch case:
switch case (op) {
case ‘+’:
cout << a + b;
break;
... etc

Para a condição usei if (b==0)

Mas para alem de me dar erro, acho que falta aqui qualquer coisa... como é que o programa sabe qual a operação a fazer?

A borrada que fix até agora foi:

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

int main(int argc, char *argv[])
{
int a, b;
prinf(" qual o numero a \n");
scanf("%d", &a);
printf(" o numero introduzido e: \n", &a);
if(b==0) {
printf("Nao pode dividir por: %i\n",b);
}
switch case (op) {
case '+':
cout << a + b;
break;
case '-':
cout << a - b;
break;
case 'x':
cout << a * b;
break;
case '/':
cout << a / b;
break;
}
system("PAUSE");
return 0;
}


Quem me puder ajudar... ;) Obrigado
 
Código:
#include <stdio.h>
int main() {
    int a,b,r;
    char op;
    printf("Introduza o valor de a: ");
    scanf("%d",&a);
    printf("Introduza o valor de b: ");
    scanf("%d",&b);
    fflush(stdin);
    printf("Indique a operacao a efectuar ( + , - , * , / ): ");
    op=getchar();
    switch (op) {
           case '+': r=a+b;
                     break;
           case '-': r=a-b;
                     break;
           case '*': r=a*b;
                     break;
           case '/': if (b==0) {
                        printf("Erro: Divisao por zero!\n");    
                        getchar();getchar();                       
                        return 0;                                        
                        }
                     else {   
                     r=a/b;
                     break;}
           default: printf("Operador errado!!\n");
           }
    printf("%d%c%d=%d\n",a,op,b,r);       
    system("PAUSE");
    return 0;
}

Usei aqueles 2 getchar() seguidos do return 0, porque não estava a conseguir resolver o problema da divisão por zero. Eu tinha
Código:
if (b==0) {
                        printf("Erro: Divisao por zero!\n");
                        break;
                        }
..........
printf("%d%c%d=%d\n",a,op,b,r);.....
Mas assim está a efectuar a operação de divisão mesmo que o b seja 0. O problema é básico de resolver mas já estou meio comido, amanhã resolvo isto.
 
JemanPT: sem receberes o sinal de operação pelo stdin é complicado o programa saber a operação a fazer.

Pelo menos mais um getchar precisas.

Baderous: da próxima vez, dá só ideias para ele resolver o problema, não lhe dês o código :D

Ensina a pescar, não dês o peixe.
 
Desculpa a pergunta, mas como estou cá para aprender, qual o porquê do %d e o %c? é á sorte ou tem significado?

O que faz o fflush(stdin)? esta, eu ainda não aprendi ;)

Thanks
 
Desculpa a pergunta, mas como estou cá para aprender, qual o porquê do %d e o %c? é á sorte ou tem significado?

O que faz o fflush(stdin)? esta, eu ainda não aprendi ;)

Thanks

Tem significado. O %d é para dígitos e o %c para chars.

A função fflush em C está definida para streams de saída (e.g. stdout), logo, não faz grande sentido usá-la para o stdin.

Em C não existe & (referência), só em C++.

Existe.
 
Desculpa a pergunta, mas como estou cá para aprender, qual o porquê do %d e o %c? é á sorte ou tem significado?

O que faz o fflush(stdin)? esta, eu ainda não aprendi ;)

Thanks

Tem significado. O %d é para dígitos e o %c para chars.

O %d é usado para inteiros e o %c é usado para caracteres.

Só não concordo totalmente ali com a afirmação do AliFromCairo porque o %f também é para dígitos (floats). Fica só aqui esta nota ...

Convém usares os tipos certos (de acordo com a declaração que fizeste) porque senão podes correr o risco de "perder informação/precisão". Isto é, se tentares representar um float como um inteiro, a representação é feita, mas perdes a informação sobre a parte decimal. É por causa disso que existem estas diferenças.

O fflush(stdin) é uma técnica que se costuma usar para limpar o buffer de input, só para certificar que não se recebe lixo na string que queremos analisar.
 
Não, não existe. O gcc engole isso porque é também um compilador de C++, e para todos os efeitos práticos C é um sub-conjunto de C++.

Mas posso estar enganado, podes postar alguma referencia sobre C onde indica que exista &?


Estás enganado em várias coisas.

Antes de mais, a mais óbvia. O GCC é o nome que dão à colecção de compiladores. O compilador de C é o gcc e o compilador de C++ é o g++. Essa do gcc "engolir" as referências por ser compilador de C++ não tem pés nem cabeça.

Sobre o teu engano do operador &, aconselho-te a leres o livro "The C programming language" de Brian Kernighan e Dennis Ritchie. Se por acaso conseguires arranjar a 2ª edição, que abrange a norma ISO da linguagem C, abre-o na página 78 e lê o que escreveram na secção 5.1 sobre "pointers and addresses".
 
Estás enganado em várias coisas.

Antes de mais, a mais óbvia. O GCC é o nome que dão à colecção de compiladores. O compilador de C é o gcc e o compilador de C++ é o g++. Essa do gcc "engolir" as referências por ser compilador de C++ não tem pés nem cabeça.

Sobre o teu engano do operador &, aconselho-te a leres o livro "The C programming language" de Brian Kernighan e Dennis Ritchie. Se por acaso conseguires arranjar a 2ª edição, que abrange a norma ISO da linguagem C, abre-o na página 78 e lê o que escreveram na secção 5.1 sobre "pointers and addresses".

Tens razão, não sei onde é que fui buscar esta.
Ignorem o que eu disse.

Ele já afirmou que se enganou ;)

As referências é algo usado em quase todas as linguagens de programação :P E é tramado perceber como se usam e para que servem, para ser sincero durante mesmo muito tempo usei referências só porque era mecanizado ou porque o compilador dava erro :P Julgo que agora já as uso com consciência do que estou a fazer ;)

EDIT: Já agora.... http://youtube.com/watch?v=6pmWojisM_E
 
Última edição:
Ele já afirmou que se enganou ;)

As referências é algo usado em quase todas as linguagens de programação :P E é tramado perceber como se usam e para que servem, para ser sincero durante mesmo muito tempo usei referências só porque era mecanizado ou porque o compilador dava erro :P Julgo que agora já as uso com consciência do que estou a fazer ;)

EDIT: Já agora.... http://youtube.com/watch?v=6pmWojisM_E

Pequena correcção: referências são usadas em Java. Em (quase) tudo o resto são ponteiros.
 
Pequena correcção: referências são usadas em Java. Em (quase) tudo o resto são ponteiros.
Tu crias um ponteiro para um endereço de memória, mas podes usar referências também. São coisas diferentes, e em C e C++ existe referências. O java é um caso particular, usa muita coisa que o programador nem sequer precisa de ter noções, referências e ponteiros por exemplo.
 
Back
Topo