Задание такоe:
Написать генератор случайных слов от 3 до 5 букв (определить случайно). Используя правила:
начинать слово с гласной или согласной (определить случайно);
чередовать гласные и согласные буквы в слове.
Написал код, но появляются неожиданные результаты. При отладке переменная words принимает параметры больше 6. И символы выводятся неизвестные.
int main(void)
{
srand(time(NULL));
int glasn[6] = { 97, 101, 105, 111, 117, 121 }; //Код англ гласных
int sglasn[20] = { 98, 99, 100, 102, 103, 104, 106, 107, 108,
109, 110, 112, 113, 114, 115, 116, 118, 119, 120,
122 }; //Код англ согласных
int words = 4 + rand() % 6; //Количество символов в строке
char *randomS = (char*)malloc(words * sizeof(char)); //Массив символов
randomS[0] = 97 + rand() % 122; //Определение первого символа
for (int i = 1; i < words - 1; i++)
{
// Проверка на гласность предыдущего сивола
if (randomS[i - 1] == 97)
randomS[i] = sglasn[0 + rand() % 19];
else if (randomS[i - 1] == 101)
randomS[i] = sglasn[0 + rand() % 19];
else if (randomS[i - 1] == 105)
randomS[i] = sglasn[0 + rand() % 19];
else if (randomS[i - 1] == 111)
randomS[i] = sglasn[0 + rand() % 19];
else if (randomS[i - 1] == 117)
randomS[i] = sglasn[0 + rand() % 19];
else if (randomS[i - 1] == 121)
randomS[i] = sglasn[0 + rand() % 19];
// Если предыдущий символ согласный
else
randomS[i] = glasn[0 + rand() % 5];
}
randomS[words - 1] = 0;
printf("%s", randomS);
free(randomS);
getchar();
return 0;
}
rand() % 6 выдает значения от 0 до 5 (включительно). Поэтому, Ваша переменная words принимает значения от 4 до 9 (включительно).
Если нужно от 3 до 5 (включительно), то нужен такой код
rand()%3 + 3
А много другого кода можно сильно-сильно упростить.
И наверно здесь randomS[0] = 97 + rand() % 122; также ошибка.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости