Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

229
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!