web-dev-qa-db-ja.com

文字を比較する方法は?

私はcを学んでいます。質問があります。プログラムが機能しないのはなぜですか?

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

char cmd;

void exec()
{
        if (cmd == "e")
        {
                printf("%c", cmd);
                // exit(0);
        }
        else
        {
                printf("Illegal Arg");
        }
}

void input()
{
        scanf("%c", &cmd);
        exec();
}

int main()
{
        input();
        return 0;
}

「e」を挿入しましたが、不正な引数と表示されます。
cmdが「e」と等しくありません。どうして? scanfでcmdを「e」に設定しました。

5
lolxdfly

まず、Cでは、一重引用符はcharリテラルであり、二重引用符は文字列リテラルです。したがって、「C」と「C」は同じものではありません。

文字列の比較を行うには、strcmpを使用します。

const char* str = "abc";
if (strcmp ("abc", str) == 0) {
   printf("strings match\n");
}

文字の比較を行うには、等式演算子を使用します。

char c = 'a';
if ('a' == c) {
   printf("characters match\n");
}
27
Casper Beyer

cmdはchar型ですが、_"e"_はchar型ではなく文字列です。このように書く必要がありますif(cmd == 'e')

0
CharlesX