Programa em C
|
25-11-2014, 17:42
Mensagem: #1
|
|||
|
|||
Programa em C
Boas,
Estou a começar a desenvolver umas pequenas coisas em C e estou a tentar fazer um pequenino programa que: 1º-pede dois números ao utilizador; 2º-pergunta ao utilizador que operação quer efectuar; 3º-após a escolha da opção deverá mostrar o resultado, de acordo com a opção. No entanto, só estou a conseguir que seja verificado o primeiro IF, ou seja, se for digitada a letra 'a' ele mostra o resultado da soma; se for digitada uma letra diferente de 'a', mesmo que seja 'b', 'c' ou 'd', não avança mais nada. Alguém pode ajudar? Obrigado. o código é o seguinte: #include <stdio.h> int main() { int n1, n2; char operacao; printf("Digite o 1º número: "); scanf("%d", &n1); printf("Digite o 2º número: "); scanf("%d", &n2); printf("Escolheu os números %d e %d.\n", n1, n2); printf("Que operação deseja efectuar?\n"); printf("a - Soma;\n"); printf("b - Subtração;\n"); printf("c - Divisão;\n"); printf("d - Multiplicação;\n"); printf("Digite a opção: "); operacao = getchar(); if (operacao = getchar() == 'a') { printf("O resultado da soma é %d.", n1 + n2); } else if (operacao = getchar() == 'b') { printf("O resultado da subtração é %d.", n1 - n2); } else if (operacao = getchar() == 'c') { printf("O resultado da divisão é %d.", n1 / n2); } else if (operacao = getchar() == 'd') { printf("O resultado da multiplicação é %d.", n1 * n2); } else { printf("Tem de escolher a, b, c ou d"); } return 0; } |
|||
25-11-2014, 18:18
Mensagem: #2
|
|||
|
|||
RE: Programa em C
Um aparte: usa as tags de code para meter codigo, fica mais legivel.
O teu problema é que em cada if estás a ler de novo o teclado. Antes do 1º if já apanhaste a opção do utilizador ( operacao = getchar(); ) , por isso nos if's só tens de comparar a variavel com a letra correspondente (ou seja, retira = getchar() de dentro de cada if e fica só com if (operacao == 'a') etc.). Pedidos de ajuda via PM serão ignorados Acordo ortográfico? Desconheço, obrigado Agradeço ao Chrome o facto de os meus posts nao terem acentos |
|||
25-11-2014, 18:36
Mensagem: #3
|
|||
|
|||
RE: Programa em C
Corvus,
Obrigado pela dica das tags. Já tinha feito dessa forma que sugeres, só que nesse caso assim que insiro o 2º número o código é executado, apresenta o texto "digite a opção" mas não me deixa escrever a opção e executa logo o último ELSE "Tem de escolher a, b, c ou d". |
|||
25-11-2014, 20:20
Mensagem: #4
|
|||
|
|||
RE: Programa em C
Pois, esse é o problema do scanf (e uma das razoes que não deve ser usado) (e também o problema de ler as questões de relance e esquecer pormenores ao responder )
O scanf deixa-te o enter q deste no buffer de entrada. Tens de limpar o buffer antes de pedires a tecla, ou então usa o codigo abaixo em vez do operacao = getchar() : Código: while ((operacao = getchar()) != EOF && operacao != '\n'); Basicamente, é um loop vazio que fica a ler o teclado até ler algo diferente de new line (que é, não por acaso, o caracter que é deixado pelo scanf e que estava a fazer o getchar() seguir logo) ou até detectar o fim de ficheiro (que pode ser provocado pelo teclado com um ctrl-z em windows ou ctrl-d em linux). Assim que carregues numa outra tecla qualquer, o loop termina e tens a tecla na var operação Pedidos de ajuda via PM serão ignorados Acordo ortográfico? Desconheço, obrigado Agradeço ao Chrome o facto de os meus posts nao terem acentos |
|||
25-11-2014, 20:22
Mensagem: #5
|
|||
|
|||
RE: Programa em C
Mais um aparte. Comparação de strings deve ser sempre feita com recurso às funções strcmp e stricmp (sendo esta última case sensitive). E antes da digitacao da letra, deves ter "fflush(stdin)" para limpar o buffer do teclado. Surgem diversas vezes problemas relacionados com isso
|
|||
26-11-2014, 10:29
(Esta mensagem foi modificada pela última vez a: 26-11-2014 10:30 por Corvus.)
Mensagem: #6
|
|||
|
|||
RE: Programa em C
Ele está a comparar caracteres e não strings. Se estivesse a comparar strings com ==, apenas estaria a comparar os endereços delas e não os valores . Por outro lado, embora não seja realmente má ideia fazer o fflush do stdin, é conveniente usar na mesma o loop. Já apanhei sistemas (raros, sem dúvida) em que o fflush não limpou o buffer de entrada.
Pedidos de ajuda via PM serão ignorados Acordo ortográfico? Desconheço, obrigado Agradeço ao Chrome o facto de os meus posts nao terem acentos |
|||
26-11-2014, 10:59
Mensagem: #7
|
|||
|
|||
RE: Programa em C
Corvus, o código que sugeriste funcionou impecável. Obrigado.
Zee, obrigado também pelas dicas. Assim é muito mais fácil começar a apanhar o jeito da programação. |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 2 Visitante(s)