我的C代码有问题。我想写的函数是一个数组,它接受100个数字并打印小于我数组中数字平均值的素数。我有一个错误,我不知道为什么我的代码无效:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 100
void Array123( int arr[] ) {
int i = 0, arr[SIZE], j, count = 0;
float sum = 0, avg;
do{
scanf( " %d", &arr[i] );
i++;
count++;
sum += arr[i];
}
while ( ( arr[i] != 0 ) || ( i < SIZE ) );
avg = sum / count;
for ( j = 2; j <= arr[i] - 1; j++ ) {
if ( arr[i] % j == 0 ) {
break;
}
}
if ( j == arr[i] ) {
if ( arr[i] < avg ) {
printf( "%d", arr[i] );
}
}
}
int main( ) {
int arr[SIZE], i, x;
for ( i = 0; i < SIZE; i++ ) {
x = Array123( arr[SIZE] );
printf( " %d", x );
}
}
请注意,我允许使用没有指针的数组。
错误是:
Warning 2 warning C4047: 'function' : 'int *' differs in levels of indirection from 'int'
Warning 3 warning C4024: 'Array123' : different types for formal and actual parameter 1
5 IntelliSense: argument of type "int" is incompatible with parameter of type "int *" 41 14
Error 4 error C2120: 'void' illegal with all types 41 1
Error 1 error C2082: redefinition of formal parameter 'arr'
答案 0 :(得分:1)
主要问题是您在函数中重新声明arr
答案 1 :(得分:0)
<强> 1 强>
Array123
返回void
,您正尝试将其分配给int
,这是不可能的。
void Array123(int arr[])
...
x = Array123(arr[SIZE]);
<强> 2 强>
要将数组传递给函数,您不应该使用[]
传递它,请尝试:
Array123(arr);
第3 强>
arr
内的值将由Array123
修改,您不必返回该数组。
<强> 4 强>
arr
是一个函数参数,您将在该函数内重新声明它。你应该删除这个额外的声明。
答案 2 :(得分:0)
您正在重新声明“arr”作为覆盖函数参数的局部变量:
更改此行:
int i=0,arr[SIZE],j,count=0;
对此:
int i=0,j,count=0;
答案 3 :(得分:0)
谢谢,我现在没有错误,但我意识到我的代码不够好所以我把它改成了更合理。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define size 100
void PrimeNumbers(int size)
{
int num,i,sum=0,count=0,arr[size],flag=0,j;
float avg;
do{
scanf(" %d",&num);
if(num >0)
{
arr[i]=num;
i++;
count++;
sum+=num;
}while (i<100 && num!=0 )
avg=sum/count;
for (i=0;i<count;i++)
{
for ( j = 2; i < arr[i]; i++)
{
if (arr[i] % j == 0)
flag=1;
if (flag =1 && arr[i]<avg)
printf("the prime number that less than average\n %d ",arr[i]);
}