Ricky
Ricky

Reputation: 133

Printing Integer array in reverse

This is fairly simple problem to print the integer array in reverse order. Although whenever i try printing, it ends up displaying garbage value. Below is my program.

#include <stdio.h>
#include <conio.h>
int main()
{
    int temp = { '\0' };
    int num[9];
    int i;
    int j = 8;

    printf("Enter 8 numbers\n");
    for (i = 0; i < 8; i++)
    {
        scanf_s("%d", &num[i], 1);
    }
    for (i = 0; i <= j; i++, j--)
    {
        temp = num[i];
        num[i] = num[j];
        num[j] = temp;  
    }
    printf("\nThe numbers in reverse are\n");
    for (i = 0; i <=8; i++)
    {
        printf("%d\n", num[i]);
    }
    _getch(); 
    return 0;
}

Let just say i input numbers from 1 to 8, it does print the number in reverse but the first value it prints is a garbage value. I know i can use and If statement to counter the situation but is there a way to counter this problem without using if?

Upvotes: 3

Views: 7225

Answers (4)

pmg
pmg

Reputation: 108978

You can also keep the for loop the same and change the indexing

    #define ARRAY_SIZE 8

    // print in reverse order
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        printf("%d\n", num[ARRAY_SIZE - i - 1]);
    }

I used a #define to make it easier to change the program when you need a different array size: just change at one place rather than the 5 you currently need.

Upvotes: 2

Vlad from Moscow
Vlad from Moscow

Reputation: 310950

There are several logical inconsistences in your program,

You defined the array as having 9 elements

int num[9];

but enter only 8 elements

for (i = 0; i < 8; i++)
{
    scanf_s("%d", &num[i], 1);
}

Thus the last element of the array with insex 8 is not initialized. Nevertheless in the loop that swaps elements of the array you access this uninitialized element

int j = 8;
//...
for (i = 0; i <= j; i++, j--)
{
    temp = num[i];
    num[i] = num[j];
    num[j] = temp;  
}

There is also no need to use function scanf_s instead of scanf

Take into account that to output an array in the reverse order you need not to swap its elements.

The program that outputs an array in the reverse order without swapping its elements can look the following way

#include <stdio.h>
#include <conio.h>

#define N   9

int main( void )
{
    int num[N];
    int i;

    printf( "Enter %d numbers\n", N );

    i = 0;
    while ( i < N && scanf( "%d", &num[i] ) == 1 ) i++;

    printf( "\nThe numbers in reverse are\n" );

    while ( i-- ) printf( "%d ", num[i] );
    printf( "\n" );

    _getch(); 

    return 0;
}

If to enter a sequence of numbers

1 2 3 4 5 6 7 8 9

then the output will look like

9 8 7 6 5 4 3 2 1 

If you want to swap elements of the array then the program can look like

#include <stdio.h>
#include <conio.h>

#define N   9

int main( void )
{
    int num[N];
    int n;
    int i;

    printf( "Enter %d numbers\n", N );

    n = 0;
    while ( n < N && scanf( "%d", &num[n] ) == 1 ) n++;

    for ( i = 0; i < n / 2; i++ )
    {
        int tmp = num[i];
        num[i] = num[n - i - 1];
        num[n - i - 1] = tmp;
    }

    printf( "\nThe numbers in reverse are\n" );

    for ( i = 0; i < n; i++ ) printf( "%d ", num[i] );
    printf( "\n" );

    _getch(); 

    return 0;
}

If the input is the same as above then output will be

9 8 7 6 5 4 3 2 1 

Upvotes: 2

Frank Palmisano
Frank Palmisano

Reputation: 91

If you want to print the integers in your array in reverse, simply start at the last index, then work up to the top.

The third loop should look more like this:

int j = 7; // an array of size 8 starts at the 0th and ends at the 7th index.
while(j >= 0)
{
   printf("%d", num[j]);
   j--;
}

Upvotes: 4

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726509

You've made two mistakes here:

  • With 8 numbers, the index of the highest item is 7, not 8. Set j to 7 on initialization to fix this.
  • When you iterate 8 numbers from index zero, use operator < or !=, not <= to avoid an off-by-one error. Your first loop does it right, but the last loop is broken.

In addition, you may want to reduce the size of the array to 8, because the ninth element is unused.

Upvotes: 6

Related Questions