Prawdopodobnie podczas wczytywania danych zapominasz o EOF. Proponuję tak wczytać hasło:
fgets(znaki, sizeof(znaki), stdin);
znaki[strcspn(znaki, "\n")] = 0;
j = strlen(znaki); // <string.h>
Hasło możesz również wypisać bez żadnej pętli:
if((w_lit > 0) && (m_lit > 0) && (cyfr > 0) && (sym_spac > 0) && (j >= 8))
{
printf("%s\n", znaki);
}
Poza tym nazywaj zmienne zgodnie z ich przeznaczeniem, po angielsku i tak żeby były zrozumiałe dla każdego (również dla Ciebie jak wrócisz do kodu za rok). Czemu ‘j’ to wielkość łańcucha ‘znaki’. Nie lepiej od razu nazwać ‘password’ i ‘passwordSize’. To samo tyczy się całej reszty.
Nie ma potrzeby pisania kodów ASCII znaków:
if((symbol >= 'A') && (symbol <= 'Z')) w_lit++;
else if((symbol >= 'a') && (symbol <= 'z')) m_lit++;
else if((symbol >= '0') && (symbol <= '9')) cyfr++;
else sym_spac++;
Mógłbyś również użyć funkcji z <ctype.h>: islower, isupper, isdigit