Estoy tratando de usar switch case con char[2] en C, pero solo admite números enteros.
int main() { char c[2] = "h"; switch (c) { case "h": printf("done!"); } return 1; }Para una mejor comprensión, lo que estoy tratando de hacer es:
if "h" in ")($+#&@+)#" Básicamente, quiero crear una condición que haga coincidir un carácter con un grupo de caracteres, pero de manera eficiente , lo primero que me vino a la mente es usar el cambio de mayúsculas y minúsculas, pero solo admite int. Pero cuando uso (int)c que se recomienda en otras respuestas de stackoverflow, no devuelve el valor ASCII.
Usar la instrucción switch en este caso no tiene sentido.
Simplemente use la función estándar strchr declarada en <string.h> .
#include <string.h> //... if ( strchr( c, 'h' ) != NULL ) puts( "done!" );No puede comparar arreglos de caracteres (cadenas) usando una declaración de cambio directamente, porque las declaraciones de cambio solo funcionan con tipos fundamentales; no arreglos de tipos fundamentales.
La razón por la que usar (int)c no devuelve el valor ASCII es porque está lanzando char[] -> int en lugar de char -> int .
La diferencia entre comillas simples y dobles es importante en C:
'h' es de tipo char y es igual a 104 (minúscula 'h' en ASCII)"h" es de tipo const char* y apunta a 2 caracteres: h y el carácter de terminación nulo \0 Para verificar si un carácter está presente en una cadena, puede usar la función strchr como se menciona en la respuesta de Vlad de Moscú , o si quiere hacerlo usted mismo usando declaraciones de cambio, puede probar esto:
int main() { char c[2] = "h"; bool found = false; for (int i = 0; i < 2; ++i) { switch (c[i]) { case 'h': // compare c[i] == 'h' found = true; break; default: break; } } if (found) printf("Done!"); return 0; }