If you want to go to extremes for improving then add booleans called isVowel and isDigit, use them like this:
Code:
c = tolower(c);
isDigit = (c >= '0' & c <= '9');
isVowel = (c == 'a' | c == 'e' | c == 'i' | c == 'o' | c == 'u' );
vowelCount += isVowel;
if ( isDigit )
puts("...");
else if ( !isVowel )
{
conCount++;
// Your loop
}
For further extremes do it in ASM and utilise the MUL instruction to set and address to goto when a statement is false to and then use the GOTO instruction I think to goto to that address or 0 (next address), 0 for continue into the "if" block, address for skip the block, it basically is a hack of sorts for removing the slowest part of code, branch instructions (used by if/else if/switch/case statements)