I'm trying to use switch case with char[2] in C, but it only supports integers.
int main() {
char c[2] = "h";
switch (c) {
case "h":
printf("done!");
}
return 1;
}
For better understanding, what I'm trying to do is:
if "h" in ")($+#&@+)#"
Basically I want to make a condition that matches a character with a group of characters, but efficiently, the first thing that came to mind is to use switch case but it only supports int. But when I use (int)c
which is recommended in other stackoverflow answers, it doesn't return the ascii value.
You can't compare arrays of characters (strings) using a switch statement directly, because switch statements only work with fundamental types; not arrays of fundamental types.
The reason using (int)c
isn't returning the ASCII value is because you're casting char[]
->int
instead of char
->int
.
The difference between single and double quotes is an important one in C:
'h'
is of type char
, and is equal to 104
(Lowercase 'h' in ASCII)"h"
is of type const char*
, and points to 2 characters: h
, & the null terminating character \0
To check if a character is present in a string, you can use the strchr
function as mentioned in Vlad from Moscow's answer, or if you want to do it yourself using switch statements you could try this:
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;
}