Ir para conteúdo
Fórum Script Brasil
  • 0

Parar programa ao deixar de receber dado em scanf


dyam96

Pergunta

Olá! Estou fazendo um exercício que pede para montar um programa com funções para operações básicas. O padrão de entrada é: 

"1.5 1 + 2 * representa ((1.5 + 1) * 2)"

"Entrada: Uma sequência de operandos (números) e operadores (sinais ‘+’, ‘-‘, ‘/’, ‘*’)
separados por um espaço ‘ ‘ representando uma operação composta a ser resolvida.
Considere que sempre haverá pelo menos uma operação básica para ser realizada (i.e. dois
operandos e um operador)." 

Meu programa está logo abaixo, estou tendo problemas para ele parar após ler o último operador, pois o programa fica esperando outro float depois disso. Se alguém puder ajudar, agradeço desde já!

#include <stdio.h>

float Soma(float num1, float num2);
float Subtracao(float num1, float num2);
float Divisao(float num1, float num2);
float Multiplicacao(float num1, float num2);
float Operacao(float num1, float num2, char c);


int main(){

    float num1, num2, final=0;
    char c;

    scanf(" %f %f %c", &num1, &num2, &c);
        
        float result;
        result = Operacao(num1, num2, c);
        
        num1 = result; 
    final = result;
        
        while(((scanf(" %f", &num2))!=0)){
            if(scanf(" %c", &c)!=0){
                result = Operacao(num1, num2, c);
                num1 = result;
                final = result;
            }
            
        }
    
    printf("%.2f", final);
    return 0;
}

float Soma(float num1, float num2){
    float a = num1 + num2;
    return a;
}

float Subtracao(float num1, float num2){
    float a = num1 - num2;
    return a;
}

float Divisao(float num1, float num2){
    float a = num1/num2;
    return a;
}

float Multiplicacao(float num1, float num2){
    float a = num1*num2;
    return a;
}

float Operacao(float num1, float num2, char c){
        
    float result;
    
    if(c=='+'){
        result = Soma(num1, num2);    
    }
    if(c=='-'){
        result = Subtracao(num1, num1);    
    }
    if(c=='/'){
        result = Divisao(num1, num1);   
    }
    if(c=='*'){
        result = Multiplicacao(num1, num2);
    }
    
    return result;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

No final do seu código, quando você escreve as condicionais pra saber qual operador, você chama a função correspondente, porém a passagem de parâmetros está feito errada. Observe: No final você passa a variável ' num1 ' , duas vezes nas funções ' Subtração ' e ' Divisão '. 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...