程序的目标:如果两个数组相同,则返回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,我找不到原因。 怎么了?
答案 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;
}
您的代码的问题在于,您是在循环完成其迭代之前从函数返回的。