Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I am trying to reverse an array in C. But, the code throws out random 1-2 to some very large numbers digit numbers

As the title states I am trying to make a program using C which asks user to input the array creates a new array, where the values in the array have been reversed.
For ex,
Input: 10, 20, 30, 40
Output: 40, 30, 20, 10
I had written the following code for reversing the arrays,

#include <stdio.h>
#define MAX_SIZE 100
int main()
{
    int sizeArray;
    int arr[MAX_SIZE];
    int * ptr = arr;
    printf("Enter Array size: ");
    scanf("%d", &sizeArray);
    printf("Enter Array elements:\n");
    for (int i = 0; i < sizeArray; i++)
    {
        scanf("%d", ptr + i);
    }
    printf("Copying to another array....\n");
    
    int newArr[MAX_SIZE];
    int * ptr2 = newArr;
    for (int i = 0; i < sizeArray; i++)
    {
        *(ptr2 + i) = *(ptr + sizeArray - i+1 );
    }
    printf("Printing new array:\n");
    for (int i = 0; i < sizeArray; i++)
    {
        printf("%d\n", *(ptr2 + i));
    }
    return 0;

For ex:
When I input the values:
1, 2, 3, 4
The output is:
897546457,
1,
4,
3

Please help me with what I am doing wrong here.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

In this statement

*(ptr2 + i) = *(ptr + sizeArray - i+1 );

the expression ptr + sizeArray - i+1 points outside the set of actual data then i is equal to 0 or equal to 1 because in this case you have

ptr + sizeArray - 0 +1

that is the same as

ptr + sizeArray +1

and

ptr + sizeArray - 1 +1

that is the same as

ptr + sizeArray

Also you did not reset the pointer ptr2 before this loop

printf("Printing new array:\n");
for (int i = 0; i < sizeArray; i++)
{
    printf("%d\n", *(ptr2 + i));
}

If you want to use pointers to copy in the reverse order one array in another then the code can look the following way

#include <stdio.h>

#define MAX_SIZE 100

int main( void )
{
    int arr[MAX_SIZE];
    int sizeArray;

    printf("Enter Array size: ");
    if ( scanf("%d", &sizeArray) != 1 )
    {
        sizeArray = 1; 
    }
    else if ( MAX_SIZE < sizeArray )
    {
        sizeArray = MAX_SIZE;
    }

    int *ptr = arr;

    printf("Enter Array elements:\n");
    for (; ptr < arr + sizeArray; ++ptr )
    {
        scanf("%d", ptr );
    }
    printf("Copying to another array....\n");
    
    int newArr[MAX_SIZE];
    int * ptr2 = newArr;
    
    while ( ptr != arr )
    {
        *ptr2++ = *--ptr;
    }

    printf("Printing new array:\n");
    for ( ptr2 = newArr; ptr2 < newArr + sizeArray; ++ptr2 )
    {
        printf("%d\n", *ptr2);
    }

    return 0;
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading