Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较两个字符_C_Char_Comparison_Strcmp - Fatal编程技术网

C 比较两个字符

C 比较两个字符,c,char,comparison,strcmp,C,Char,Comparison,Strcmp,为什么这样不行?我想比较两个chars //Login. char myName = 'name'; //Login Temp. char nameTemp[10]; again: printf("Name?\t"); scanf("%c", *nameTemp); if (strcmp(myName, nameTemp) == 0) { printf("Hej"); } else { print

为什么这样不行?我想比较两个
char
s

   //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; }
这条线错了

char myName = 'name';

myName只能容纳1个字符,您正试图在变量中放入字符串。您需要一个空分隔字符数组。

我认为您需要更改

char myName = 'name';
为此:

char *myName = "name";
因为
myName
只能保存一个字符,所以您将一个字符串存储在错误的位置

也可以这样更改您的scanf:

scanf("%s", nameTemp);
//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");
    }
}
注意:-

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

更改:

char myName = 'name';
char myName = 'name';

这里应该有指向字符数组的指针,而不是一个字符。 也改变

scanf("%c", *nameTemp);

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


在这类节目中,你是怎么做到的?在这个世界上,为什么不使用普通
而使用
循环?

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

   char *myName="name";
数组的名称就足够了,因为它是一个指针

  scanf("%s", nameTemp);

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

char myName = 'name';
这根本不是你想的。如果希望此变量保存字符串,则应为
char*
类型,而不是
char
。而且文字
'name'
不是字符串
“name”
——单引号表示字符文字而不是字符串文字。四个字符的文字是一种很少使用且很少有用的构造,它将所有字符组合成一个整数——在本例中,一个整数包含字符“n”、“A”、“m”和“e”的字节值。(这在旧的Mac OS上经常被用于文件元数据。我不确定它是否在其他地方被广泛使用。)

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

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

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

scanf("%s", nameTemp);
//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");
    }
}

(警告:在浏览器中编写,未经测试,但希望您能理解。)

您必须更改此设置


“行不通”是什么意思?你预计会发生什么,实际会发生什么?相信我-你不需要gotoIt看起来好像你是编程新手,所以我也要指出,这一点更为贴切@crashmstr:-忽略了这一点。谢谢现在更新我的答案!但我想我现在已经太迟了:(@crashmstr:-非常感谢,先生!这不是一个字符串-这是一个多字符文字。奇怪的是,我认为它甚至不会警告你,因为这些文字会生成整数,而将整数截断成字符并不是一个错误。
char *myName = "name";
char myName[] = "name";