比较两个字符

时间:2013-11-25 19:45:31

标签: c char comparison strcmp

为什么这不起作用?我想比较两个char

   //Login.
    char myName = 'name';

    //Login Temp.
    char nameTemp[10];

again:

    printf("Name?\t");
    scanf("%c", *nameTemp);



    if (strcmp(myName, nameTemp) == 0) {
        printf("Hej");
    }

    else { printf("Wrong. Try again"); goto again; }

6 个答案:

答案 0 :(得分:4)

变化:

char myName = 'name';

const char *myName = "name";

你应该在这里指向chars数组而不是一个char。 也改变

scanf("%c", *nameTemp);

scanf("%s", nameTemp);

您应该扫描字符数组而不是一个字符。

goto在这种程序中?为什么在世界上你没有使用普通while循环?

答案 1 :(得分:3)

此行错误

char myName = 'name';

myName只能容纳1个字符,并且您正在尝试将字符串放入变量中。你需要一个空分隔的char数组。

答案 2 :(得分:3)

我认为你需要改变

char myName = 'name';

到此:

char *myName = "name";

由于myName只能容纳一个字符而你正在存储一个错误的字符串。

同样更改您的scanf:

scanf("%s", nameTemp);

注意: -

char * 用于指向一个简单的字符数据值数组。

答案 3 :(得分:2)

要在c中声明一个字符串,必须声明一个char类型的指针,如下所示

   char *myName="name";

并且数组的名称就足够了,因为它是一个指针

  scanf("%s", nameTemp);

答案 4 :(得分:1)

您似乎对指针和值类型没有扎实的理解。例如:

char myName = 'name';

这不是根本你在想什么。如果您希望此变量包含字符串,则该字符串应为char *而不是char。文字'name'不是字符串"name" - 单引号表示字符文字而不是字符串文字。四字符字符文字是一种很少使用且很少有用的结构,它将所有字符组合成一个整数 - 在这种情况下,一个整数包含字符'n','a','m'和'E'。 (过去常常在旧的Mac OS上用于文件元数据。我不确定它是否曾在其他地方常用。)

此外,您的阅读代码不正确:

scanf("%c", *nameTemp);

格式说明符“%c”查找单个字符而不是字符串,而*nameTemp表示“取消引用指针nameTemp”,这根本不是您要在此处执行的操作。相反,你想要“%s”格式说明符,只是传递nameTemp,因为scanf想要一个指针。

此代码的正确惯用版本应如下所示:

//Login.
char myName = "name";

//Login Temp.
char nameTemp[10];

int matched = 0;

while (!matched) {
    printf("Name?\t");
    int readSucceeded = scanf("%9s", nameTemp);

    if (readSucceeded && strcmp(myName, nameTemp) == 0) {
        printf("Hej");
        break;
    }

    else {
        printf("Wrong. Try again");
    }
}

(警告:用浏览器编写,未经过测试,但希望你能得到这个想法。)

答案 5 :(得分:0)

你必须改变这个

char myName = 'name';

char *myName = "name";

char myName[] = "name";