In my opinion, you have two things wrong. First is the use of literal values. Those should be constants or definitions. The second is the logic error mentioned previously. Here is how you can fix things.
#define COUNT_ROWS 4
#define COUNT_COLS 5
void main()
{
int arr[COUNT_ROWS][COUNT_COLS];
int row, col;
printf("Input array values \n");
for(row=0;row<COUNT_ROWS;row++)
{
for(col=0;col<COUNT_COLS;col++)
{
printf("array[row %d][col %d]: ",row,col);
scanf("%d", &arr[row][col] );
}
}
}
This fixes the logic error explained previously. The bottom line is the input and output loops should be the same and I think it is best to loop by row on the outside loop and by column on the inside loop. This is how the code I showed you is doing it and how you did it on your output loop.