C 尝试基于另一个数组中的正数生成数组
尝试根据其他数组的正数生成数组。有什么问题吗?在latex Xcode中不工作。基本上,这应该很容易,但我不能解决这个问题。有什么提示吗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
#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来保存0float
值的能力。如果要包含任何值,则必须创建大小大于零的数组。问题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.
}
}