fclopez
fclopez

Reputation: 55

store value from a for-loop into an array

I would like to store values read from a for-loop to an array

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?
}

Upvotes: 1

Views: 113207

Answers (4)

Keith Miller
Keith Miller

Reputation: 1347

By looking at your code I am assuming that you are trying to build a static array, so I will demonstrate that (so you don't have to focus on concepts like malloc for the time being). There is however, several problems with your code that I will go over now.

First off your array declaration:

char A[];

to me it looks like your for loop is filling an array of integers, so this array should be declared as an integer, furthermore you are not setting the size of the array, since your code has i increment until it is 1000 you should just declare an integer array with 1000 elements:

int A[1000];

Second your for loop:

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

you're better off just declaring i with the rest of your variables, although you can declare it in a for loop I personally wouldn't suggest doing it. Also you declare i twice in this loop. Finally your condition to continue the loop (i = 1000) will abort the loop immediatly since i will never be equal to 1000 since you set it to 0. Remember a for loop only loops while the middle statement is true. So with that in mind you should now have:

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

And now we can use the = statement and the value of i to set each array element for A:

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

it's that simple!

Upvotes: 7

Julien Fouilh&#233;
Julien Fouilh&#233;

Reputation: 2658

If you want to add an element in C, you have several methods.

Static array

A static array is declared with a number of elements you're unable to edit. So it's perfect if you know exactly the number of elements you'll have. @Dervall did explain that well.

Dynamic array

A dynamic array is declared with malloc function. And the size can be changed. It's difficult and hard to maintain though. But :

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;
}

Better to split it into a function of course :)

You can use the realloc function as well ! Which is made for that, but I find it interesting to develop like this

Upvotes: 2

Wug
Wug

Reputation: 13196

There's a lot of stuff wrong with your snippet. Here's a compilable example

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
}

And a better version:

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

for (int i = 0; i < NUM_ELEMENTS; ++i)
    A[i] = 5 * i;

Upvotes: 0

Dervall
Dervall

Reputation: 5744

There are multiple issues with your code

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
}

Also, the char datatype won't be able to hold values over a certain size, and will cause overflow making the values wrap around. You might want to declare A as int A[1000] instead.

  • Arrays need to be of a constant size, or you will need to allocate them using malloc
  • The second part of the loop cannot redeclare i again. It also will loop forever if you have an assignment statement in it like you do. I assume you want to loop up to 1000 instead
  • The actual question, to assign into an array use the [] operator.
  • x was not initialized to anything, making it contain a garbage value. You need to assign values to variables upon declaring them. C does not do this for you automatically.

Upvotes: 3

Related Questions