仅比较两个不同阵列的第一个元素

时间:2014-03-05 02:07:41

标签: c++ c arrays

当我运行它时,if语句假设只比较两个数组的第一个元素。只要数组“ans”只包含y或Y,它就可以正常工作,但是如果我输入“是”等,它会返回false并向下射击。

    char y[2]= "y";
    char n[2] = "n";
    char ans[5];

    printf("Answer yes of no. (y/n) ");
    scanf(" %s", ans);
    if (strcasecmp(&ans[0], &y[0]) == 0)
    {
        printf("You said yes.\n");
        printf("%c, %s\n", y[0], ans);
    }
    else if (strcasecmp(&ans[0], &n[0]) == 0)
    {
        printf("You said no.\n");
    }
    else
    {
        printf("hmm?\n");
    }

2 个答案:

答案 0 :(得分:2)

实际上,strcasecmp()比较两个字符串,而不是两个字符,即使您将指针传递给它们的第一个字符,它仍会比较从该字符开始的两个字符串,直到终止'\0'

你可以比较他们的第一个字符,忽略这样的情况:

if (toupper(ans[0]) == toupper(y[0])))

答案 1 :(得分:1)

使用strncasecmp代替strcasecmp,这样您就可以只比较第一个字符而不是整个字符串。变化:

if (strcasecmp(&ans[0], &y[0]) == 0)

为:

if (strncasecmp(ans, y, 1) == 0)

,其他类似的。