rand string in C

220
10 февраля 2019, 07:40

Задание тако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;
}
Answer 1

rand() % 6 выдает значения от 0 до 5 (включительно). Поэтому, Ваша переменная words принимает значения от 4 до 9 (включительно).

Если нужно от 3 до 5 (включительно), то нужен такой код

rand()%3 + 3

А много другого кода можно сильно-сильно упростить.

И наверно здесь randomS[0] = 97 + rand() % 122; также ошибка.

READ ALSO
Как передать структуру в функцию?

Как передать структуру в функцию?

Такс, смотри, воот ссылки полезные для тебя 1,2

240
Как запустить batch file

Как запустить batch file

Есть у нас batch file, и в нем:

229
mariadb не пускает к соединению

mariadb не пускает к соединению

прошу помощипри соединении из java к mairadb получаю ошибку could not create connection to database server при этом такое становится когда количество запросов возрастает

208