我的代码在c中有什么问题

时间:2014-03-29 10:02:44

标签: c

我的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' 

4 个答案:

答案 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]);
             }