3

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?

1
  • 1
    Start the j value with 7.because array value start with 0-7 Commented Mar 17, 2015 at 4:53

4 Answers 4

6

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.

Sign up to request clarification or add additional context in comments.

Comments

4

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

Comments

2

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 

Comments

2

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.

1 Comment

Yeah that makes sense to me, using #define is lot better

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.