C语言数组查找唯一元素编译报错求助:expected expression
问题修复与代码优化
编译错误的直接修复
你调用uniqueElements时写的arr[]是错误写法——C语言中传递数组参数只需写数组名arr,不需要加[]。
其他隐藏问题及修复
- 变量
n未初始化:你定义了int n;但未赋值,数组长度固定为10,必须把n初始化为10,否则函数使用未初始化的n会导致程序行为异常。 - 函数返回值不合理:
uniqueElements的作用是打印唯一元素,不需要返回int类型值,应把返回类型改成void,同时去掉调用时的赋值语句。 - 逻辑错误导致功能失效:原函数里只要找到一个重复元素就直接
return 0,会让函数提前退出,无法遍历整个数组找出所有唯一元素,必须删掉这个提前返回的语句;另外可以在找到重复后加break,避免不必要的比较。
修复后的完整代码
//Unique Elements Finder : Implement a C function to find all unique elements in an array. #include <stdio.h> #include <stdlib.h> // 修改返回类型为void void uniqueElements(int arr[], int n); int main() { system("clear"); int arr[10]; for(int i=0;i<10;++i) { printf("Please enter a number: "); scanf("%d", &arr[i]); } // 初始化n为数组长度10 int n = 10; // 调用函数时仅传数组名arr,无需赋值给变量 uniqueElements(arr, n); printf("\n\n"); return 0; } // 修改返回类型为void void uniqueElements(int arr[], int n) { for (int i = 0; i < n;++i) { int isUnique = 1; for (int j = 0; j < n;++j) { if(i!=j && arr[i]==arr[j]) { isUnique = 0; // 找到重复后跳出内层循环,减少不必要的比较 break; } } if (isUnique) { printf("%d ", arr[i]); // 加空格优化输出格式 } } }
内容的提问来源于stack exchange,提问作者MEDOMAI
相关产品推荐
相关产品推荐

