Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

239
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda