Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Implementação da função transferir

Segue abaixo meu código:

package main

import ( "fmt" "os" )

type ContaCorrente struct { titular string numeroAgencia int numeroConta int saldo float64 }

func (cc *ContaCorrente) deposita() { var deposita float64

println("Digite o valor a ser depositado: ")
fmt.Scan(&(deposita))
if deposita > 0 {
    cc.saldo = deposita + cc.saldo
    fmt.Println("Valor após o deposito é de: ", cc.saldo)
} else {
    fmt.Println("Valor de depósito menor que 0!")
}

}

func (cc *ContaCorrente) saque() { var saque float64

println("Digite o valor para saque:")
fmt.Scan(&(saque))

if saque > 0 && saque <= cc.saldo {
    saque = cc.saldo - saque
    println("Saldo restante: ", saque)

} else {
    println("Valor indisponivel para saque!")
}

}

func (cc *ContaCorrente) transferir() float64 { var valorDaTransferencia float64 var contaDestino *ContaCorrente

    if valorDaTransferencia < cc.saldo && valorDaTransferencia > 0 { 
        println("Digite o valor a ser transferido")
        fmt.Scan(&(valorDaTransferencia))

        println("Qual a conta destino?")
        fmt.Scan(contaDestino)
        contaDestino = cliente()


        cc.saldo -= valorDaTransferencia
        cc.transferir()


        return valorDaTransferencia


} else { 
    println("Não foi possível realizar a transferencia")
    return cc.saldo
}
 }

func cliente() *ContaCorrente { cc := &ContaCorrente{}

fmt.Println("Digite o nome do titular")
fmt.Scan(&(cc.titular))

println("Entre com o número da agencia")
fmt.Scan(&(cc.numeroAgencia))

println("Entre com o número da conta")
fmt.Scan(&(cc.numeroConta))

println("Entre com o saldo")
fmt.Scan(&(cc.saldo))

fmt.Printf("Saldo: %g \n", cc.saldo)

return (*ContaCorrente)(cc)

}

func leComando() int { var comando int fmt.Scan(&comando)

fmt.Println("Opção digita foi: ", comando)
return comando

}

func menu() { println("Deseja realizar alguma operação?") println("1- Depositar") println("2- Sacar") println("3- Transferir") println("4- sair")

}

func main() {

cc := cliente()

menu()

comando := leComando()

switch comando {
case 1:
    cc.deposita()
case 2:
    cc.saque()
case 3:
    cc.transferir()
case 4:
    fmt.Println("Saindo do programa")
    os.Exit(0)
default:
    println("Opção invalida!")
    os.Exit(-1)

}

}

Não estou conseguindo implementar a função transferir, antes de colocar && valorDaTransferencia > 0 no if da função pedia para digitar o valor para transferencia até esse valor chegar ao valor do saldo disponível.

2 respostas
solução!

Olá, Vitória! Tudo bem?

Vou tentar te auxiliar a resolver o bug.

No if da função, você verifica se o valor a ser transferido é menor do que o saldo disponível na conta (valorDaTransferencia < cc.saldo). No entanto, a variável valorDaTransferencia é inicializada logo após a verificação do if, o que significa que seu valor é indefinido nesse ponto.

Portanto, mesmo que você digite um valor válido para transferência, o if não será satisfeito e a função retornará que não foi possível realizar a transferência.

Para corrigir o problema, você precisa inverter a ordem das linhas na função transferir. Primeiro, você deve ler os valores de entrada (valor a ser transferido e conta destino), depois verificar se o valor é válido e, somente então, realizar a transferência. Além disso, você precisa definir a variável valorDaTransferencia antes de usá-la no if.

Veja como ficaria a função corrigida:

func (cc *ContaCorrente) transferir() {
    var valorDaTransferencia float64
    var contaDestino *ContaCorrente

    println("Digite o valor a ser transferido")
    fmt.Scan(&(valorDaTransferencia))

    if valorDaTransferencia > 0 && valorDaTransferencia <= cc.saldo {
        println("Qual a conta destino?")
        contaDestino = cliente()

        cc.saldo -= valorDaTransferencia
        contaDestino.saldo += valorDaTransferencia

        println("Transferência realizada com sucesso")
    } else {
        println("Não foi possível realizar a transferência")
    }
}

Observe que, após ler o valor da transferência, o código verifica se o valor é maior que zero e menor ou igual ao saldo disponível na conta. Somente se essa condição for satisfeita, a transferência é realizada.

O problema foi solucionado?

Estou à disposição!

Obrigada Larissa <3