1

我想将从 for 循环读取的值存储到数组

char A[];
int x;
int y=5;

for( int i=0; int i =1000; i++) {
   x = x+y;
   // then store/append x as elements of the char array, A.... what is the syntax?
}
4

4 回答 4

7

通过查看您的代码,我假设您正在尝试构建一个静态数组,因此我将演示这一点(因此您暂时不必关注诸如 malloc 之类的概念)。但是,我现在将讨论您的代码存在的几个问题。

首先关闭您的数组声明:

char A[];

对我来说,看起来你的 for 循环正在填充一个整数数组,所以这个数组应该声明为一个整数,而且你没有设置数组的大小,因为你的代码有 i 递增直到它是 1000 你应该声明具有 1000 个元素的整数数组:

int A[1000];

其次你的 for 循环:

for(int i = 0, int i = 1000; i++)

你最好只声明i其余的变量,尽管你可以在 for 循环中声明它,我个人不建议这样做。你也在这个循环中声明i了两次。最后,您继续循环的条件 ( i = 1000) 将立即中止循环i1000因为您将其设置为0. 请记住,for 循环仅在中间语句为真时循环。因此,考虑到这一点,您现在应该拥有:

int A[1000], i, x, y = 5;
for(i = 0; i < 1000; i++)

现在我们可以使用=语句和值i来设置每个数组元素A

int A[1000], i, x, y = 5;
for(i = 0; i < 1000; i++)
{
    x += y;
    A[i] = x;
}

就这么简单!

于 2012-08-24T16:02:18.480 回答
3

您的代码存在多个问题

char A[1000]; // Need to specify a compile time constant for the array size
int x=0;
int y=5;

for( int i=0; i < 1000; i++) { // Condition was wrong
   x = x+y;
   // then store/append x as elements of the char array, A.... what is the syntax?
   A[i] = x; // Add the value
}

此外,char数据类型将无法保存超过一定大小的值,并且会导致溢出使值环绕。您可能想改为声明Aint A[1000]

  • 数组需要具有恒定大小,否则您需要使用malloc
  • 循环的第二部分不能i再次重新声明。如果你像你一样在其中有一个赋值语句,它也会永远循环。我假设您想循环最多 1000 个
  • 实际问题,分配到数组中使用[]运算符。
  • x未初始化为任何内容,使其包含垃圾值。您需要在声明变量时为其赋值。C 不会自动为您执行此操作。
于 2012-08-24T14:34:53.443 回答
2

如果你想在 C 中添加一个元素,你有几种方法。

静态数组

声明了一个静态数组,其中包含许多您无法编辑的元素。因此,如果您确切地知道您将拥有的元素数量,那就太完美了。@Dervall 确实很好地解释了这一点。

动态数组

使用 malloc 函数声明动态数组。并且可以更改大小。但是,它很难维护。但 :

int *A = NULL;
int *tmp; // to free ex allocated arrays
int i;
int j;
int x = 0;
int y = 5;

for (i = 0 ; i < 1000 ; i++) {
    // saving temporarly the ex array
    tmp = A;
    // we allocate a new array
    if ((A = malloc(sizeof(int) * (i + 1))) == NULL) {
        return EXIT_FAILURE;
    }
    // we fill the new array allocated with ex values which are in tmp
    for (j = 0; j < i; j++) {
        A[j] = tmp[j];
    }
    // if it's not the first time, we free the ex array
    if (tmp != NULL)
        free(tmp);
    x = x + y;
    A[i] = x;
}

当然最好把它分成一个函数:)

您也可以使用该realloc功能!这是为此而设计的,但我发现像这样开发很有趣

于 2012-08-24T14:55:17.657 回答
0

您的代码段有很多问题。这是一个可编译的示例

char *A = malloc(sizeof(*A) * NUM_ELEMENTS); // you shouldn't declare on the stack
int x = 0; // initialize
int y=5;

for( int i = 0; i < NUM_ELEMENTS; i++) { // proper for loop syntax
    x = x+y;
    A[i]=x; // assign element of array
}

还有一个更好的版本:

char *A = malloc(sizeof(*A) * NUM_ELEMENTS);

for (int i = 0; i < NUM_ELEMENTS; ++i)
    A[i] = 5 * i;
于 2012-08-24T14:36:28.000 回答