尝试根据其他数组的正数创建数组。有什么问题?不在乳胶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;
}
答案 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
个浮点数保留空间根据执行语句时size
和n
的值。此分配不会因为您稍后更改n
的值而更改。由于n
在分配数组Y
时的值为零,因此任何访问该数组中任何内容的尝试都是未定义的行为,该数组中根本没有元素。
现在,有两种简单的方法来修复你的代码,正如其他答案已经指出的那样(我主要想添加一个解释):
预先计算正数的数量,然后执行float Y[n]
,最后进行实际复制。
只使用最大可能的正数作为数组大小,i。即说float X[size], Y[size];
。
这两种方法都有效,它们只是有不同的权衡。但我不认为,你还在担心这些权衡。
问题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]
。