为什么返回1?

时间:2020-02-18 04:50:31

标签: c

程序的目标:如果两个数组相同,则返回1。如果不返回0。 我做了什么:

#include <stdio.h>


int identical ( int arr1[], int arr2[], unsigned int len )
{
    for (int i = 0; i < len; i++){
        if (len == 0){
            return 1;
        } else if (arr1[i] != arr2[i]) {
            return 0;
        } else {
            return 1;
        }
    }

}


int main ()
{
    int arr1[3] = {10,15,20};
    int arr2[3] = {10,15,21};
    printf("%d\n", identical(arr1, arr2, 3));

    return 0;
}

它总是返回1,我找不到原因。 怎么了?

3 个答案:

答案 0 :(得分:2)

int identical ( int arr1[], int arr2[], unsigned int len )
{
    for (int i = 0; i < len; i++){
     if (arr1[i] != arr2[i]) {
        return 0;
     }
   }
   return 1;
}

这只会检查2个数组是否连续有3(len = 3)个相似的值。

答案 1 :(得分:1)

您刚刚弄乱了if-else语句,就像在第一次迭代中一样,您正在检查并通过使用return语句终止循环,因此它永远不会在下一个索引上进行。

只需将else的return语句替换为continue,然后在函数的末尾添加一个return语句为return 1

    int identical ( int arr1[], int arr2[], unsigned int len ){
    for (int i = 0; i < len; i++){
        if (len == 0){
            return 1;
        } else if (arr1[i] != arr2[i]) {
            return 0;
        } else {
            continue;
        }
    }

    return 1;

}

OR

您需要按如下方式(有效地)重写函数声明:

int identical ( int arr1[], int arr2[], unsigned int len ){

   if (len == 0)    return 1;

    for (int i = 0; i < len; i++)
        if (arr1[i] != arr2[i])     return 0; 

   return 1;
} 

谢谢。

答案 2 :(得分:0)

#include <stdio.h>


int identical ( int arr1[], int arr2[], unsigned int len )
{
    for (int i = 0; i < len; i++){
        if (len == 0){
            return 1;
        } else if (arr1[i] != arr2[i]) {
            return 0;
        } else {
            if (i == len - 1){
              return 1;      
            }
        }
    }

}


int main ()
{
    int arr1[3] = {10,15,20};
    int arr2[3] = {10,15,21};
    printf("%d\n", identical(arr1, arr2, 3));

    return 0;
}

您的代码的问题在于,您是在循环完成其迭代之前从函数返回的。

相关问题