0

I am writing a program with many switch cases, and I am getting this error:

cannot jump from switch statement to this case label

This error occurs in all cases. Maybe a { is missing? I don't know.

Some parts of the program are in Portuguese, but I don't think it will be a problem to understand.

This is the code:

#include <iostream>
#include <vector>
#include "veiculo.h"
#include "concessionaria.h"

int main() {
  std::vector < concessionaria > concessionarias;
  int o;
  
  do {
    std::cout << "1. Criar concessionária\n";
    std::cout << "2. Selecionar concessionária\n";
    std::cout << "0. Sair\n";
    std::cin >> o;
    
    switch (o) {
      
      case 1: 
        std::string nomeConcessionaria, cnpjConcessionaria;
        std::cout << "Nome da Concessionária: ";
        std::cin >> nomeConcessionaria;
        std::cout << "CNPJ da Concessionária: ";
        std::cin >> cnpjConcessionaria;
        concessionarias.emplace_back(nomeConcessionaria, cnpjConcessionaria);
        break;
      
      case 2:
      
        if (concessionarias.empty()) {
          std::cout << "Nenhuma concessionária criada.\n";
          continue;
        }
      
        std::cout << "Concessionárias disponíveis:\n";
      
        for (size_t i = 0; i < concessionarias.size(); ++i) {
          std::cout << i + 1 << ". " << concessionarias[i].getNome() << "\n";
        }
      
        int escolha;
        std::cout << "Escolha uma concessionária (1-" << concessionarias.size() << "): ";
        std::cin >> escolha;
      
        if (escolha >= 1 && escolha <= static_cast < int > (concessionarias.size())) {
          concessionaria & concessionariaAtual = concessionarias[escolha - 1];
        
          do {
            std::cout << "1. Adicionar veículo\n";
            std::cout << "2. Remover veículo\n";
            std::cout << "0. Voltar para a seleção de concessionária\n";
            std::cin >> o;
          
            switch (o) {
            
              case 1:
                std::string marca, chassi;
                int preco, ano;
                std::cout << "\nEscolha o tipo de veículo:\n";
                std::cout << "1. Automóvel\n";
                std::cout << "2. Moto\n";
                std::cout << "3. Caminhão\n";
                std::cin >> o;
                veiculo * novoVeiculo = nullptr;
            
                switch (o) {
                  case 1:
                    std::string motor;
                    std::cout << "Informe a marca, o preço, o nº do chassi, o ano de fabricação e o tipo de motor:\n";
                    std::cin >> marca;
                    std::cin >> preco;
                    std::cin >> chassi;
                    std::cin >> ano;
                    std::cin >> motor;
                    novoVeiculo = new automovel(marca, preco, chassi, ano, motor);
                    break;
                  case 2:
                    std::string modelo;
                    std::cout << "Informe a marca, o preço, o nº do chassi, o ano de fabricação e o modelo:\n";
                    std::cin >> marca;
                    std::cin >> preco;
                    std::cin >> chassi;
                    std::cin >> ano;
                    std::cin >> modelo;
                    novoVeiculo = new moto(marca, preco, chassi, ano, modelo);
                    break;
                  case 3:
                    std::string carga;
                    std::cout << "Informe a marca, o preço, o nº do chassi, o ano de fabricação e o tipo de carga:\n";
                    std::cin >> marca;
                    std::cin >> preco;
                    std::cin >> chassi;
                    std::cin >> ano;
                    std::cin >> carga;
                    novoVeiculo = new caminhao(marca, preco, chassi, ano, carga);
                    break;
                  default:
                    std::cout << "Opção inválida!\n";
                    break;
                 }
                if (novoVeiculo != nullptr) {
                  concessionariaAtual.adicionar(novoVeiculo);
                }
                break;
              case 2:
                std::string chassi_;
                std::cout << "Digite o número do chassi do veículo a ser removido: ";
                std::cin >> chassi_;
                concessionariaAtual.remover(chassi_);
                break;
              case 0:
                std::cout << "Voltando para a seleção de concessionária.\n";
                break;
              default:
                std::cout << "Opção inválida!\n";
                break;
            }
          } while (o != 0);
        } else {
          std::cout << "Escolha inválida!\n";
        }
        break;
      case 0:
        std::cout << "Encerrando o programa.\n";
        break;
      default:
        std::cout << "Opção inválida!\n";
        break;
    }
  } while (o != 0);
  return 0;
}

I tried asking different AI bots for help, but it didn't work.

6
  • 1
    Can you remove all irrelevant lines?
    – 3CxEZiVlQ
    Commented Dec 10, 2023 at 23:48
  • 2
    You are declaring a bunch of local variables inside of case blocks, so you should surround those blocks with { } braces, eg: case 1: { ... break; } Commented Dec 10, 2023 at 23:50
  • 2
    I tried asking different AI bots -- Actually learning C++ would take a minute, if not seconds to fix. There is no need for an "AI bot" to tell you that your formatting is missing braces -- even a good IDE could point out the syntax issues. BTW, (and in my opinion), that brace style of having the opening brace on the same line doesn't help in finding the issue with mismatched braces. Commented Dec 10, 2023 at 23:51
  • Don't misuse oop, your code is a single function w/o any OOP design.
    – 3CxEZiVlQ
    Commented Dec 10, 2023 at 23:57
  • Why do you need so much I/O to demonstrate this error? You shouldn't need user input; hardcode values instead of getting them from the user, as in int o = 1; // Example user input. See how close you can get your main function to int main() { int o = 1; /* Example user input */ switch (o) { case 1: case 2: } }. (You will need more than just this, but how much more? Drop the red herrings and show only what is actually needed to produce the error.) See also minimal reproducible example.
    – JaMiT
    Commented Dec 11, 2023 at 3:12

0

Browse other questions tagged or ask your own question.