Reserving seats in a movie theater
I/O

You want to read 2 characters although you use scanf("%s", codes[i]) this can have the effect you are overwriting the end of the buffer when you read scanf("%s", codes[required_seats-1]); since there is always an \0 added to your two characters. 

Either increase the buffer, change the format specifier or use an alternative method of reading from keyboard e.g. fgets() followed by sscanf() or simply read the characters one by one using fgetc(). The latter method has the advantage that you could prevent the user from entering invalid characters while he types.

You may also want to convert the characters to upper case just to be a bit more flexible towards the user (toupper())

structure

I think the code could do with some more functions to clarify the purpose. 

E.g. 

int isCodeValid(char* code)
{
  return code[0] &gt;= 'A' &amp;&amp; code[0] &lt;= 'A' + TOTAL_ROWS - 1 &amp;&amp; 
     code[1] &gt;= '1' &amp;&amp;  code[1] &lt;= '1' + SEATS_PER_ROW - 1;
}

int isRepeatedSelection(char* codes);
...


loop

What other suggested and as you mentioned already decrementing i in the for loop may be a bit confusing for the reader (well it was for me at least), having a do..while loop feels more natural here where the while condition is false until user enters correct code (or changes his mind and gives up).