I don't think it picks up 10,11,12,13,1 though (10,J,Q,K,A)
Well spotted!
It now counts ace as both low and high. (Note MAXN is now 14.
I also (believe I) fixed another bug in the for(i=MAXN-1... line
by making the test a little more complex.

I definitely agree that
for (i = 0; i < MAXN; i++)
is simpler, and it's how I first did it.
But in optimizing, I realized that it does not actually
need to scan to the end (all MAXN positions of cards)
if there is no chance of a straight (not enough cards
left compared to in_a_row). Unfortunately, this required
basically doing it backwards.
It's one of those balance issues between easier to understand
and slightly faster. Usually I go for easier to understand,
but I assumed you were looking for the fastest way.

I'll stay out of the political "globals vs locals" debate,
except to mention that 8 out of 10 programmers agree that the
use of locals discourages terrorism.

Code:
/* straight.c */

#define MAXN        14  /* 13 cards plus an extra space for ace high */
#define CARDSINHAND  7
#define IN_A_ROW     5

int is_straight( int* cards, int ncards ) {

    int seen[ MAXN ];
    int in_a_row;
    int i;

    for (i = 0; i < MAXN; i++) seen[ i ] = 0;

    for (i = 0; i < ncards; i++) {
        seen[ cards[ i ] - 1 ]++;
        if (cards[ i ] == 1) seen[ MAXN - 1 ]++; /* Set ace as high also */
    }

    in_a_row = IN_A_ROW;
    for (i = MAXN - 1; i + 1 >= in_a_row; i--) {
        if (seen[ i ]) {
            if (--in_a_row == 0)
                return 1;
        }
        else
            in_a_row = IN_A_ROW;
    }
    return 0;
}

int main() {
    int c[] = {  1,  3,  2,  9,  5,  4, 11 };  /* 1,  2,  3,  4,  5,  9, 11 */
    int d[] = { 11,  1,  3, 13,  7,  9,  5 };  /* 1,  3,  5,  7,  9, 11, 13 */
    int e[] = {  5, 12, 10,  7,  1, 11, 13 };  /* 1,  5,  7, 10, 11, 12, 13 */
    int f[] = { 12,  5, 11,  6, 10,  8,  7 };  /* 5,  6,  7,  8, 10, 11, 12 */
    printf( "c: " );   printf( is_straight( c, CARDSINHAND ) ? "yes" : "no" );
    printf( "\nd: " ); printf( is_straight( d, CARDSINHAND ) ? "yes" : "no" );
    printf( "\ne: " ); printf( is_straight( e, CARDSINHAND ) ? "yes" : "no" );
    printf( "\nf: " ); printf( is_straight( f, CARDSINHAND ) ? "yes" : "no" );
    printf( "\n" );
}