1
resposta

Resolução

<?php
$conta = [
    "titular" => "Arthur",
    "saldo" => "1500",

];
$rodando = true;
$valorDeposito;
$valorSaque;
$escolha;


$escolha;
echo " Seja bem vindo  $conta[titular] o seu atual saldo é de: $conta[saldo]\n";
 while ($rodando) {
    echo "*****************************\n";
    echo "1-Consultar saldo atual\n";
    echo "2- Sacar valor\n ";
    echo "3- Depositar valor\n";
    echo "4-Sair\n";
    echo "*****************************\n";

  $escolha = (int) trim (fgets(STDIN));
  switch ($escolha){
    case 1;
    echo "O seu saldo atual é de : $conta[saldo]\n";
    break;
    case 2;
    echo "Qual o valor que voce deseja sacar  ";
    $valorSaque = (int) trim (fgets(STDIN));
    $conta['saldo'] -= $valorSaque;
    if ($conta ['saldo'] >= $valorSaque){
      echo "Seu saque foi realizado com sucesso\n";
    } 
    else {
      echo "Impossivel realizar o saque\n";
    }
    break;
    case 3;
    echo "Qual o valor que voce deseja depositar ?\n";
      $valorDeposito = (int) trim (fgets(STDIN));
    $conta['saldo'] += $valorDeposito;
    break; 
    case 4;
     $rodando = false;
     echo "Adeus...";
     break;
 default:
    echo "Opção inválida\n";
    break;

  }

   };
1 resposta

Oii, Arthur! Como vai?

Parabéns pela sua dedicação em resolver o desafio! Achei excelente que você decidiu ir além do básico e utilizou um array associativo ($conta) para armazenar o titular e o saldo. Essa é uma ótima prática para organizar dados relacionados.

Seu código está muito bem estruturado, o uso do while e do switch está correto para criar o menu. Tenho apenas algumas observações para te ajudar a refinar a lógica, principalmente na parte do saque, que é um ponto crítico em sistemas bancários.

Vamos analisar juntos?

  1. A lógica do saque (case 2)

Atualmente, a ordem das ações no seu código está assim:

  1. Você pergunta o valor.
  2. Você subtrai o valor do saldo imediatamente ($conta['saldo'] -= $valorSaque;).
  3. Só depois você verifica se o saldo era suficiente.

O problema: Se o usuário tiver R$ 100 e tentar sacar R$ 200, o seu código vai subtrair primeiro (o saldo vai para -R$ 100) e depois avisar que é impossível realizar o saque. Porém, o saldo já foi alterado pra negativo na memória do programa!

A solução: A verificação (if) deve acontecer antes de mexer no dinheiro. Algo assim:

case 2:
    echo "Qual o valor que voce deseja sacar? ";
    $valorSaque = (float) trim(fgets(STDIN));

    // Primeiro verificamos se o saldo É MAIOR ou IGUAL ao saque
    if ($conta['saldo'] >= $valorSaque) {
        $conta['saldo'] -= $valorSaque; // Só subtrai se tiver saldo
        echo "Seu saque foi realizado com sucesso\n";
    } else {
        echo "Saldo insuficiente para realizar o saque\n";
    }
    break;

2. Tipos de dados (Int vs Float)

Notei que você usou (int) para converter a entrada. Pra valores monetários, é interessante usar (float), pois o usuário pode querer sacar R$ 50.50 (cinquenta reais e cinquenta centavos), por exemplo. O int arredondaria esse valor, ignorando os centavos.

3. Detalhe na declaração

Logo no início, você declarou $escolha; duas vezes seguidas:

$valorDeposito;
$valorSaque;
$escolha; // Uma vez
$escolha; // Duas vezes (essa linha pode ser removida)

Isso não gera erro, mas limpar o código duplicado deixa ele mais legível.

Você mandou muito bem na estrutura geral! Fazer essas pequenas correções de lógica é exatamente o que um programador faz no dia a dia. Continue praticando assim.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!