int i;
for (i = 0; Autor[i] != '\0'; ++i)
{
if ((i == 0) || (Autor[i - 1] == ' '))
Autor[i] = toupper(Autor[i]);
else
Autor[i] = tolower(Autor[i]);
}
Gdyby ktoś miał wątpliwości: Autor[i-1] nie spowoduje błędu adresowania (nie zaadresuje Autor[-1] dla i == 0) ponieważ spełniony będzie pierwszy z warunków (i == 0) i kod dla drugiego z nich nie będzie w ogóle wywoływany. Innymi słowy dla i == 0 if skończy się na porównaniu i do zera, później testowane będą oba warunki (i będzie większe od zera i indeksowanie będzie poprawne). W razie obaw alternatywa:
int i;
if (Autor[0] != '\0')
{
Autor[0] = toupper(Autor[0]);
for (i = 1; Autor[i] != '\0'; ++i)
{
if (Autor[i - 1] == ' ')
Autor[i] = toupper(Autor[i]);
else
Autor[i] = tolower(Autor[i]);
}
}
Dlaczego potrzebny jest if przed for? Żeby nie wyskoczyć z bufora dla ciągu pustego.