Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

230
Visualizações
Cambiar declaración y entrada de usuario en C++

Tengo algunos problemas para usar una declaración de switch con la entrada del usuario. ¿Alguien puede explicar qué está pasando? Lo siento si esta es una pregunta de novato, ya que estoy muy acostumbrado a Python y recién comencé a aprender C++.

 #include <iostream> #include <string> using namespace std; #include <cstdlib> int main() { string name; cout << "Enter a name: "; cin >> name; switch (name){ case name == "Seth": std::cout << "That's my name!"; return 0; break; case name == "seth": std::cout << "Wow, you couldnt even put correct capitalization on my name...\n"; std::cout << "LEARN YOUR PRONOUNS AND GO BACK TO SCHOOL!"; return 0; break; case name == "SETH": std::cout << "Ok ok you spelled my name right but make sure you turn off caps lock please"; return 0; break; default: std::cout << "Come on get my name RIGHT!!!\n"; std::cout << "But you entered " << name; } return 0; }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Según el estándar C++ 17 (9.4.2 La sentencia switch)

2 La condición será de tipo integral, tipo de enumeración o tipo de clase. Si es de tipo clase, la condición se convierte contextualmente implícitamente (Cláusula 7) a un tipo integral o de enumeración. Si el tipo (posiblemente convertido) está sujeto a promociones integrales (7.6), la condición se convierte al tipo promocionado. Cualquier declaración dentro de la declaración de cambio se puede etiquetar con una o más etiquetas de caso de la siguiente manera: expresión-constante de caso: donde la expresión-constante será una expresión constante convertida (8.20) del tipo ajustado de la condición de cambio. Dos de las constantes de caso en el mismo interruptor no tendrán el mismo valor después de la conversión.

La clase std::string no tiene un operador de conversión implícito que convierta un objeto del tipo std::string en un tipo integral o de enumeración.

Así que la expresión en esta declaración de cambio

 switch (name){

es inválido.

También etiquetas de casos como esta

 case name == "seth":

son sintácticamente incorrectos.

Podría resolver su problema con la declaración de cambio, por ejemplo, de la siguiente manera

 #include <iostream> #include <string> #include <array> #include <iterator> #include <algorithm> int main() { std::array<const char *, 3> names = { "Seth", "seth", "SETH" }; std::string name; std::cout << "Enter a name: "; std::cin >> name; size_t n = std::find( std::begin( names ), std::end( names ), name ) - std::begin( names ); switch (n) { case 0: std::cout << "That's my name!"; break; case 1: std::cout << "Wow, you couldnt even put correct capitalization on my name...\n"; std::cout << "LEARN YOUR PRONOUNS AND GO BACK TO SCHOOL!"; break; case 2: std::cout << "Ok ok you spelled my name right but make sure you turn off caps lock please"; break; default: std::cout << "Come on get my name RIGHT!!!\n"; std::cout << "But you entered " << name; break; } }
over 4 years ago · Santiago Trujillo Relatório

0

#include <iostream> #include <string> int main() { std::string name; std::cout << "Enter a name: "; std::cin >> name; if(name == "Seth") { std::cout << "That's my name!" << std::endl; } else if(name == "seth") { std::cout << "Wow, you couldn't even put correct capitalization on my name..." << std::endl; std::cout << "LEARN YOUR PRONOUNS AND GO BACK TO SCHOOL!" << std::endl; } else if(name == "SETH") { std::cout << "Ok ok you spelled my name right but make sure you turn off caps lock please" << std::endl; } else { std::cout << "Come on get my name RIGHT!!!" << std::endl; std::cout << "But you entered " << name << std::endl; } return 0; }
over 4 years ago · Santiago Trujillo Relatório

0

Como otras personas han dicho que no puede hacer una comparación de cadenas en el switch y proporcionó una solución. Pero me gustaría usar enum class que encontré más legible y la comparación int mucho más rápida que la comparación de string .

 #include <algorithm> #include <iostream> #include <iterator> #include <string> #include <unordered_map> int main() { enum class Spellings { Seth, seth, SETH }; const std::unordered_map<std::string, Spellings> spellings_map{ {"Seth", Spellings::Seth}, {"seth", Spellings::seth}, {"Seth", Spellings::SETH}, }; std::string name; std::cout << "Enter a name: "; std::cin >> name; auto result = spellings_map.find(name); if (result == spellings_map.end()) { std::cout << "Come on get my name RIGHT!!!\n"; std::cout << "But you entered " << name; return -1; } switch (result->second) { case Spellings::Seth: std::cout << "That's my name!"; break; case Spellings::seth: std::cout << "Wow, you couldnt even put correct capitalization on " "my name...\n"; std::cout << "LEARN YOUR PRONOUNS AND GO BACK TO SCHOOL!"; break; case Spellings::SETH: std::cout << "Ok ok you spelled my name right but make sure you " "turn off caps lock please"; break; } }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda