Home > Enterprise >  C switch case using char[2]
C switch case using char[2]

Time:02-14

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 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;
}
  • Related