Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu código antes de ver a resposta

<?php

$infos = [
    "titular" => "Caio",
    "saldo" => 1000
];

do {

    echo "*************\n"."Titular: ".$infos["titular"].PHP_EOL."Seu saldo:".$infos["saldo"].PHP_EOL."*************
1. Consultar saldo atual
2. Sacar valor
3. Depositar valor
4. Sair\n";

    $numero = (float) fgets(STDIN);

    switch ($numero) {
        case 1:
            echo "Saldo atual:".$infos["saldo"].PHP_EOL;
            break;
        case 2:
            echo "Qual valor deseja sacar? \n";
            $saqueDesejado = (float) fgets(STDIN);
            if ($saqueDesejado > $infos["saldo"]) {
                echo "Saldo insuficiente.\n";
            } else {
                $infos["saldo"] -= $saqueDesejado;
            }
            break;
        case 3:
            echo "Quanto deseja depositar? ";
            $depositoDesejado = (float) fgets(STDIN);
            if ($depositoDesejado < 0) {
                echo "Número inválido";
            } else {
                $infos["saldo"] += $depositoDesejado;
            }
        case 4:
            break;
        default:
            echo "Opção inválida.\n";
            break;
    }

} while ($numero != 4);
1 resposta
solução!

Oi Estudante,

Seu código está muito bom e bem estruturado para um sistema de controle de saldo bancário! 👍

Algumas sugestões para aprimorar seu código:

  1. switch com break ausente: No seu switch, o case 3 está sem o break. Isso significa que, após a execução do case 3, o código continuará executando o case 4, o que não é o comportamento desejado. Adicione um break ao final do case 3 para corrigir isso.
    case 3:
        echo "Quanto deseja depositar? ";
        $depositoDesejado = (float) fgets(STDIN);
        if ($depositoDesejado < 0) {
            echo "Número inválido";
        } else {
            $infos["saldo"] += $depositoDesejado;
        }
        break; // Adicionado o break aqui
    
  2. Validação de entrada: Embora você esteja convertendo a entrada para float, seria interessante adicionar uma validação para garantir que o usuário realmente digitou um número. Você pode usar is_numeric() para verificar se a entrada é um número antes de convertê-la.
    $numero = fgets(STDIN);
    if (is_numeric($numero)) {
        $numero = (float) $numero;
    } else {
        echo "Entrada inválida. Digite um número.\n";
        continue; // Volta para o início do loop
    }
    
  3. Formatação da saída: Para melhorar a experiência do usuário, você pode formatar a saída dos valores monetários. Por exemplo, usar number_format() para exibir o saldo com duas casas decimais.
    echo "Saldo atual: " . number_format($infos["saldo"], 2, ',', '.') . PHP_EOL;
    

Para saber mais: Funções de string em PHP

Continue praticando e explorando as possibilidades da linguagem! 💪 💻