为什么数组不能打印正确的数字?

时间:2018-09-18 14:22:41

标签: c

以下代码:

#include <stdio.h>

int izbaciSveProste(int n, int x[], int y[])
{
    int i;
    int flag=0;

    for(i=2; i<n/2; i++)
    {
        if(n%i ==0)
        {
            flag =1;
            break;
        }
    }
    if(flag==1)
        return 0;
    else
        return 1;
}

int main()
{
    int i,j,n,x[100],y[100];

    printf("Koliko elemenata zelite u polju?\n");
    scanf("%d", &n);

    printf("Enter elements in array:- ");
    for(i=0;i<n;i++)
    {
    scanf("%d",&x[i]);
    }

    int len = sizeof(x)/sizeof(x[0]);

    for(i=0; i<len; i++)
    {
        if(izbaciSveProste(x[i]))
        {
            for(j=i; j<len; j++)
            {
                x[j] = x[j+1];
            }
            i--;
            len--;
        }
    }
    printf("Elementi nakon brisanja su:\n");
    for(i=0; i<len; i++)
        printf("%d\n",y[i]);

    printf("\n");

    return 0;
}

该程序的目的是删除具有n个元素的数组x []中的所有素数,其余元素应重写为y []数组并最后显示y []中的元素数。我相信函数正常,并且在main()中存在错误,特别是在存储y []时。

2 个答案:

答案 0 :(得分:2)

您的函数原型具有3个参数:

int izbaciSveProste(int n, int x[], int y[])

调用函数时,仅提供1​​:

if(izbaciSveProste(x[i]))

编译器希望获得全部3。

由于您的函数甚至都没有触及2个数组参数,因此您可以简单地将它们从函数定义中删除,并且只使用1个整数。

另一个问题: 您在循环中打印y[i],但从未为该数组分配任何值。

答案 1 :(得分:2)

您的函数int izbaciSveProste(int n, int x[], int y[])需要三个参数。您的代码izbaciSveProste(x[i]传递了一个参数。这还不够。编译器通过错误消息告诉您该事实:

  

错误:函数'izbaciSveProste'的参数太少