Dzień dobry, zaczniemy od początku:
funkcja islower() operuje tylko na jednym znaku, zwróci ona tylko informacje czy podany znak jest małą literą czy dużą musimy zrobić inaczej.
Każdy napis w języku c jest zakończony null-bytem ( 0 ), czyli aby pobrać napis o maksymalnej długości 20 powinien Pan wykonać to tak:
char znaki[21];
scanf("%20s", znaki);
a najlepiej tak (to nie jest wymagane ale jeżeli chcemy być dobrymi programistami to nie używamy tzw. magic numbers, przy użyciu scanf nie można tego zrobić), ale jeżeli Pana to zainteresuje to można doczytać:
#define MAX_LEN 20
...
char znaki[MAX_LEN + 1];
fgets(znaki, MAX_LEN + 1, stdin);
wówczas aby przeprocesować (litera po literze) cały napis zmiennej długości używamy następującej konstrukcji:
int i=0
while(znaki[i] != 0){ //lub ewentualnie znaki[i] != '\0'
//tutaj znajdują się polecenia
++i;
}
naszym zadaniem sprawdzenie jest czy każdy ze znaków jest literą, a jeśli jest to sprawdzić czy jest małą literą a jeżeli jest to zmienić go z małej na dużą.
Przydatne polecenia:
isalpha(char) - zwraca informacje czy znak jest literą
islower(char) - zwraca informacje czy znak jest małą literą
toupper(char) - konwertuje małą literę na dużą a jeżeli podany znak nie jest małą literą zwraca ten sam znak
funkcje, które powinny znaleźć się wewnątrz pętli:
znaki[i] = toupper(znaki[i]);
nie musimy sprawdzać czy znak jest małą literą lub czy w ogóle jest literą, ponieważ 'zrobi' za nas funkcja toupper
na koniec możemy wyświetlić nasz przekonwertowany napis:
pritnf("%s\n", znaki);