I cannot express how clean and easily understandable your code was. I liked it so much that i took it as my base code. I added a few more lines and now the function is working perfectly, taking out excess whitespace as well as new lines and horizontal tabs.
Here have a look:
Code:
```int cleanSpace( char s[])
{
int i = 0, j = 0, // general loop index
first = 0,    // first non-whitespace character
last = 0;     // last non-whitespace character

// loop to find the first non-whitespace character
// and save its position as 'first'.
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] != 32 && s[i] != 9 && s[i] != 10)
{
first = i;
break;
}
}

// loop to find the last non-whitespace character
// and save its position as 'last'.
for (i = strlen(s) - 1; i > first; i--)
{
if (s[i] != 32 && s[i] != 9 && s[i] != 10)
{
last = i;
break;
}
}

// for loop to copy all characters in string 's'
// between 'first' & 'last' to string 's'.
for (i = 0; first <= last ; i++)
{
s[i] = s[first];
first++;
}
s[i] = '\0';

//for loop to find and replace white space characters
//with spaces.
for(i = 0; i < strlen(s) + 1; i++)
{
if (s[i] >= 9 && s[i] <= 10)
{
s[i] = 32;
}
}

//for loop to remove excess whitespace if there are
//more than one consecutive whitespaces.
i = 0;
while (s[i] != '\0')
{
if(s[i] == 32 && s[i+1] == 32)
{
//Since excess white space was found, we shift
//the whole string so as to take out the
//whitespace, regardless of what character is
//being copied.
for(j = i; s[j] != '\0'; j++)
{
s[j] = s[j+1];
}
}