在C语言中,当提示用户输入字符串时,会产生不希望看到的输出



谁能解释一下为什么即使用户键入'Classical'或'Jazz',前面的代码块总是显示"对不起,这不是选项之一" ?

#include <stdio.h>
int main()
{
    char c[20];
    printf("Hey! I hear you like music! What type do you like? (Classical/Jazz/Rock) ");
    gets(c);
    if(c == "Classical" || c == "classical")
        printf("Classical music is great.");
    else if(c == "Jazz" || c == "jazz")
        printf("Jazz is awesome!");
    else
        printf("Sorry, that's not one of the choices.");
    getchar();
    return 0;
}

在C语言中,您必须使用strcmp()来比较字符串:

if(strmp(c, "Classical") == 0 || strcmp(c, "classical") == 0)
    printf("Classical music is great.");
else if(strcmp(c, "Jazz") == 0 || strcmp(c, "jazz") == 0)
    printf("Jazz is awesome!");
else
    printf("Sorry, that's not one of the choices.");

如果ab是两个C字符串,a == b不会像你想象的那样。它检查ab是否指向相同的内存,而不是检查它们是否由相同的字符组成。

在您的情况下,c == "Classical"等将始终计算为false

if(c == "Classical" || c == "classical")
以上

是无效的字符串比较。使用strcmp代替,如下所示:

if(0 == strcmp(c, "Classical")) { // if c and "Classical" are equal
    printf("equal!n");
}

在C语言中,你不能直接比较字符串指针,因为那只是比较实际的指针,而不是它们所指的对象。

由于字符串字面值总是指针,而数组可以衰变为指针,因此您所做的是比较指针。

实际上,在比较指针时,你甚至不能确定两个本来相等的字符串字面值是否相等。编译器可以将字符串存储在不同的位置,即使它们是相同的。

正如其他人所解释的,在C中必须使用strcmp函数来比较字符串

您必须将它们作为字符串进行比较。

 if(strcmp(c,"Classical")==0 || strcmp(c,"classical")==0)
        printf("Classical music is great.");
    else if(strcmp(c,"Jazz")==0 || strcmp(c,"jazz")==0)
        printf("Jazz is awesome!");
    else
        printf("Sorry, that's not one of the choices.");

相关内容

  • 没有找到相关文章

最新更新