Estoy escribiendo este código que toma una entrada de userinput char y usa la declaración de cambio para ejecutar el comando respectivo. Sin embargo, debido a que las declaraciones de cambio C++ solo pueden leer entradas y enumeraciones, no estoy seguro de cómo incorporar esto. La entrada del usuario debe ser un carácter. ¿algunas ideas? Sé que charInput >> enumInput no funciona, pero no estoy seguro de qué hacer.
int main(int argc, char** argv) { enum charCommand { i, d, s, n, r, a, m, t, p, l, q }; charCommand enumInput; while (mainLoop) { cout << "enter valid input" endl; char charInput; printf("Enter a command: "); cin >> charInput; charInput >> enumInput; switch (charInput) { case i: { printf("This is case i"); exit(0); } //case i default: { cout << "invalid command, try again!\n"; } } }; }Una forma de lograr esto es asignar el carácter real ingresado a su enum correspondiente:
#include <map> //... int main (int argc, char** argv) { enum charCommand {i,d,s,n,r,a,m,t,p,l,q}; std::map<char, charCommand> charToEnumMap = {{'i',i}, {'d',d}, {'s',s}}; // Add the rest charCommand enumInput; while (mainLoop) { cout << "enter valid input" endl; char charInput; printf("Enter a command: "); cin >> charInput; auto iter = charToEnumMap.find(charInput); if ( iter != charToEnumMap.end() ) { switch (iter->second) { case i : { printf("This is case i"); exit(0); } //case i default: { cout << "invalid command, try again!\n"; } } } } }No hay necesidad de una enum aquí. switch funciona con char porque char es convertible a int . Entonces, si definimos un char como tal:
char c = 'a';..y luego enciéndelo:
switch (c) Esto funciona porque 'a' se puede convertir a int (valor ASCII). Así que esto también se puede escribir como:
switch (int(c)) // Same as switch (c) #include <iostream> int main(int argc, char** argv) { char input; std::cin >> input; switch (input) { case 'a': std::cout << 'a' << std::endl; break; case 'b': std::cout << 'b' << std::endl; break; case 'c': std::cout << 'c' << std::endl; break; default: std::cout << "Some other key" << std::endl; break; } }El ejemplo anterior funciona. Para su caso, reescribiría su programa como:
#include <iostream> int main(int argc, char** argv) { while (true) { std::cout << "enter valid input" << std::endl; char charInput; printf("Enter a command: "); std::cin >> charInput; switch (charInput) { case 'i': printf("This is case i"); exit(0); //case i default: std::cout << "invalid command, try again!\n"; break; } }; }Además, considere no usar lo siguiente en su código:
using namespace std;..ya que se considera una mala práctica. Para obtener más información sobre esto, busque por qué "usar el espacio de nombres estándar" se considera una mala práctica .