C 尝试基于另一个数组中的正数生成数组

C 尝试基于另一个数组中的正数生成数组,c,arrays,C,Arrays,尝试根据其他数组的正数生成数组。有什么问题吗?在latex Xcode中不工作。基本上,这应该很容易,但我不能解决这个问题。有什么提示吗 #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 ar

尝试根据其他数组的正数生成数组。有什么问题吗?在latex Xcode中不工作。基本上,这应该很容易,但我不能解决这个问题。有什么提示吗

 #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;
}
#包括
int main()
{
整数大小,i,n=0;

puts(“输入数组的大小您对
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++;
    }
}
(i=0;ifor//输入数组,比较并创建一个新数组 { scanf(“%f”、&X[i]); 如果(X[i]>=0) { Y[n]=X[i]; n++; } }
尝试访问X[size]是另一个问题(似乎X根本不应该是数组)

\include
int main(){
整数大小,i,n=0;

puts(“输入数组的大小以使代码更接近您所声明的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.
    }  
}
int size=80,i,n=80;//或除零以外的其他值,即值用于以后创建数组。
//必须有一些非0值,否则数组将无效
int n1=0;
//.......
浮动X[大小],Y[n];
//.......
对于(i=0;i=0)
{
Y[n1]=X[i];
n1++;
如果(n1>=n)break;//n1是数组索引,决不能大于等于n。
}  
}
编辑主要解决两个问题。
1)问题是i随着循环而变化,而大小则不是。
2)使用n创建大小为零的数组的问题,或者使用n来保存0
float
值的能力。如果要包含任何值,则必须创建大小大于零的数组。

问题1:

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

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

  • 预先计算正数的数目,然后执行
    浮点Y[n]
    ,最后进行实际复制

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

  • 两种方法都会奏效,它们只是有不同的权衡。但我不认为,你还担心权衡


    问题2:

    C中的数组索引总是从
    0
    size-1
    ,其中
    size
    是分配数组时提供的值(如
    float foo[size];
    )。访问
    foo[size]
    就是访问数组末尾的一个元素,这也是未定义的行为

    因此,您需要将循环条件从
    更改为(i=0;ieasy-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.
        }  
    }