尝试根据另一个数组中的正数创建一个数组

时间:2014-02-03 19:18:08

标签: c arrays

尝试根据其他数组的正数创建数组。有什么问题?不在乳胶Xcode工作。基本上它s supposed to be easy peasy, but I can找出问题所在。任何提示?

 #include <stdio.h>
 int main()
 {
    int size,i,n=0;
    puts("Enter the size of array <=40");
    scanf("%i",&size);

    float X[size], Y[n];
    puts("Enter the array");

    for (i=0; i<=size; i++) //entering the array and comparing and creating a  new one
    {
        scanf("%f",&X[size]);
        if (X[size]>=0)
        {
            Y[n]=X[size];
            n++;
        }  
    }

    i=0;
    for (n=0; i<=n; i++)
        printf("%f", Y[n]);

    return 0;
}

5 个答案:

答案 0 :(得分:0)

您的Y[n]声明是问题所在。 n已初始化为0。它应该是Y[size]。你的for循环体也应该是

 for (i = 0; i < size; i++) //entering the array and comparing and creating a  new one
{
    scanf("%f", &X[i]);
    if (X[i] >= 0)
    {
        Y[n] = X[i];
        n++;
    }
}

答案 1 :(得分:0)

尝试访问X [size]是另一个问题(似乎X根本不应该是一个数组)

答案 2 :(得分:0)

#include <stdio.h>

int main() {
    int size, i, n=0;
    puts("Enter the size of array <=40");
    scanf("%i", &size);

    float X[size], Y[size];
    puts("Enter the array");

    for (i=0; i < size; ++i) {
        scanf("%f", &X[i]);
        if (X[i]>=0){
            Y[n++]=X[i];
        }
    }

    for (i=0; i<n; i++)
       printf("%f\n", Y[i]);

    return 0;
}

答案 3 :(得分:0)

要让您的代码更接近您明确的目标 easy peasy (您的话,不是我的),请更改代码以包含以下内容:

int size=80,i,n=80;//or something other than zero, i.e. values are use to create arrays later.
                   //must have some non 0 value or arrays will be useless
int n1 = 0;
//.......
float X[size], Y[n];
//.......
for (i=0; i<=size; i++) //entering the array and comparing and creating a  new one
{
    scanf("%f",&X[i]);
    if (X[i]>=0)
    {
        Y[n1]=X[i];
        n1++;
        if(n1 >= n) break;// n1 is the array index and must never be >= to n.
    }  
}

编辑 主要解决两个问题 1) i 的问题随循环而变化,而 size 不是。
2) n用于创建大小为零的数组或保持0 float值的能力的问题。如果要包含任何值,则必须使用大于零的大小创建它。

答案 4 :(得分:0)

问题1:

当您使用float X[size], Y[n];声明数组时,编译器会为size中的X个浮点数和n中的Y个浮点数保留空间根据执行语句时sizen的值。此分配不会因为您稍后更改n的值而更改。由于n在分配数组Y时的值为零,因此任何访问该数组中任何内容的尝试都是未定义的行为,该数组中根本没有元素。

现在,有两种简单的方法来修复你的代码,正如其他答案已经指出的那样(我主要想添加一个解释):

  1. 预先计算正数的数量,然后执行float Y[n],最后进行实际复制。

  2. 只使用最大可能的正数作为数组大小,i。即说float X[size], Y[size];

  3. 这两种方法都有效,它们只是有不同的权衡。但我不认为,你还在担心这些权衡。


    问题2:

    C中的数组索引始终从0运行到size-1,其中size是您在分配数组时提供的值(如float foo[size];中所示)。访问foo[size]正在访问一个元素超过数组末尾,这也是未定义的行为。

    因此,您需要将循环条件从for (i=0; i<=size; i++)更改为for(i = 0; i < size; i++)


    问题3:

    哦,当然,你需要将每个数字写入数组的不同元素,i。即将X[size]更改为X[i]