我的 if 条件有什么问题?它 return 不是正确的值。在这种情况下,它应该 return 'F'。 (匹配一维数组)

what is wrong with my if condition? it doesn't return the right value. in this case it should return 'F'. (Matching 1D Array)

如果第一个数组中的每个元素都等于第二个数组中的对应元素,函数应该 return 'T',如果有 return 'F'两个数组之间的任何差异。

#include <stdio.h>

char match_array(int a[10], int b[10]);

int main()
{    
    int a1[10] = {1,2,3,4,5,6,7,8,9,10};
    int a2[10] = {0,0,0,4,5,6,7,8,9,10};
    char match;

    match = match_array(a1, a2);    
    printf("%c", match);
    
    return 0;
}

char match_array(int a[10], int b[10])
{
    int i;

    for(i=0; i<10; i++){
        if(a[i] == b[i]){
            return 'T';
        }
    }
    return 'F';
}

你的运行你的循环

for(i=0; i<10; i++){
        if(a[i] == b[i]){
            return 'T';
        }
    }
    return 'F';

遍历数组并检查每一对。 它会 return T 当(并且如果)它会达到一对相等的时候,这意味着在我们的例子中: a[3] & b[3] == 4

它将 return 正确,仅此而已。它不会到达循环的末尾,因为 return 语句停止函数并且 return 是 return 值。

在这种情况下 return F 的唯一方法是数组中没有相等的对,这里不是这种情况。

为了简化它: 您的算法是:

check if a[i] == b[i]:
if yes - stop function return true
if no - continue loop and check a[i+1] == b[i+i]

if reached here -  return F.

再次清楚地检查 match_array 的代码。

char match_array(int a[10], int b[10])
{
    int i;

    for(i=0; i<10; i++){
        if(a[i] == b[i]){
            return 'T';
        }
    }
    return 'F';
}

这里只要数组的两个对应元素相等,你就returning T。这意味着,当 'any' 两个对应元素相等时,return true。我猜,这不是你想要的。要returntrue当'all'对应元素相等时,你应该修改你的代码为:

char match_array(int a[10], int b[10])
{
    int i;

    for(i=0; i<10; i++){
        if(a[i] != b[i]){
            return 'F';
        }
    }
    return 'T';
}

这里只要两个对应的元素不相等,你就会return false。只有在遍历整个数组并发现没有元素不相等时,才应该 return true

对于初学者来说,函数应该这样声明

char match_array( const int a[], const int b[], size_t n );

也就是说函数应该能够处理各种大小的数组。

其表示数组的参数应具有限定符 const,因为传递的数组在函数内不会更改。

你的函数 returns 'T' 一旦发现数组的两个元素彼此相等,尽管所有其他元素可以彼此不相等。

for(i=0; i<10; i++){
    if(a[i] == b[i]){
        return 'T';
    }
}

函数可以这样定义

char match_array( const int a[], const int b[], size_t n )
{
    size_t i = 0;

    while ( i < n && a[i] == b[i] ) ++i;

    return i == n ? 'T' : 'F';
}

并且该函数被调用为

match = match_array( a1, a2, 10 );