lo que pasa es que no se entiende si lo sacas de contexto
for(i=0;tempCommand!=9&&i<MAX;i++){ commands[ i ][ 0 ] = tempCommand;
/* ignore comma after 5 is entered */
if ( tempCommand == 5 ) {
scanf( ",%d", &commands[ i ][ 1 ] );
} /* end if */
printf( "Enter command ( 9 to end input ): " );
scanf( "%d", &tempCommand );
}
se lee asi, mas o menos, (haga un bucle iniciando en i=o ; con limite en la variable tempCommand distinta de 9 y con i menor a MAX ; si no entra en el limite sume uno a i ) mientras no cumpla esos limites hara lo siguiente la variable tempCommand se guarda en commands[ i ][ 0 ] (fijate que cada bucle hara que i suba en una.
el bucle no termina alli dice si tempCommand es igual a 5 ingrese manualmente un decimal entero para que ocupe el lugar de la variable commands[ i ][ 0 ] o sea si es 5 meta el dato a mano que el bucle no lo hace, en cada bucle va a aparecer en pantalla si mete 9 sale del bucle,
El tema de la coma la soluciona porque la variable commands[ i ][ 1 ] es una matriz bidimensional