You can shorten it by using a function.
Your main problem is bad indentation!
And since there's no reason for your loops to count backwards it's more usual to count forwards.
Code:
#include <stdio.h>
void print_row(int cols, char corner, char line)
{
putchar(corner);
for (int c = 0; c < cols; ++c)
{
putchar(line);
putchar(line);
putchar(corner);
}
putchar('\n');
}
int main()
{
int rows, cols;
printf("Enter number of rows: ");
scanf("%d", &rows);
printf("Enter number of columns: ");
scanf("%d", &cols);
for (int r = 0; r < rows; ++r)
{
print_row(cols, '+', '-');
print_row(cols, '|', ' ');
}
print_row(cols, '+', '-');
return 0;
}