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.
CodePudding user response:
Using the switch statement in this case does not make a sense.
Just use the standard function strchr
declared in <string.h>
.
#include <string.h>
//...
if ( strchr( c, 'h' ) != NULL ) puts( "done!" );
CodePudding user response:
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 typechar
, and is equal to104
(Lowercase 'h' in ASCII)"h"
is of typeconst 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;
}