if语句的char比较不评估为true

时间:2016-11-24 07:37:03

标签: c if-statement char comparison

为什么不将以下IF语句评估为true,即使sex [i]的值为M char?

for (i=0;i<3;i++)
if (sex[i] == 'M' || sex[i] == 'm')

我正在尝试做的是创建一个字符数组,其中包含字符串或字符的多个值。在这种情况下,它是一个字符,它在if函数之外工作,如果我打印性[0]我得到M。

哦,我知道变量需要像这样声明

char sex[size][sizeofstring]

整个代码:

#include <stdio.h>

int main() {
    char name[10][256], sex[10][256];
    int i;
    for (i=0;i<3;i++) {
        printf ("Insert the name of the person %d and her gender, M for male F for female\n", i+1);
        scanf("%s", name[i]);
        scanf(" %c", sex[i]);
    }
    for (i=0;i<3;i++)
        if (*sex[i] == 'M' || *sex[i] == 'm')
            printf ("\n%s", name[i]);
    for (i=0;i<3;i++)
        if (sex[i] == 'F' || sex[i] == 'f')
            printf ("\n%s", name[i]);
}

2 个答案:

答案 0 :(得分:1)

这是长版:

char arr[size_1][size_2]

表示我想存储stringS(复数)。

arr[i]

表示我想访问第i个字符串

arr[i][j]

表示我想访问第i个字符串的第j个字符。

试试这个:

char sex[2][30] = {
{"My name is this"},
{"Your name is this"}};

printf("I'm a single character: %c\n", sex[0][5]);
printf("I'm a string, group of characters: %s\n", sex[0]);

答案 1 :(得分:0)

鉴于声明

char sex[size][sizeofstring];

使用

if (sex[i] == 'M' || sex[i] == 'm')

不起作用,因为它成为指针比较操作。它相当于:

char* p = sex[i];
void* p1 = 78;   // Assuming ASCII encoding.
                 // 'M' is an int. The int is converted to a pointer.
void* p2 = 102;  // Again, assuming ASCII encoding
if ( p == p1 || p == p2 )

这解释了为什么if语句中的条件永远不会计算为真。

<强>解决方案

您应该使用:

if ( strcmp(sex[i], "M") == 0 || strcmp(sex[i], "m") == 0)

如果您的编译器支持非标准的不区分大小写的字符串比较函数stricmp,则可以将这两个测试结合起来。

if ( stricmp(sex[i], "M") == 0 )