Я не могу понять, почему мой while l oop не дает ожидаемого результата): - PullRequest
0 голосов
/ 22 апреля 2020

Я не могу понять, что я делаю неправильно. Я новичок в C ++ и практикуюсь. Я нашел код, который пишет две буквенные комбинации с вложенными циклами while и добавляет .com в конце. Этот код работал нормально. Чтобы попрактиковаться, я хотел, чтобы он вывел третью комбинацию, но по какой-то причине я каждый раз добавляю третью, а l oop только посередине выводит {. Любая помощь с благодарностью! Спасибо !!!

#include <iostream>
using namespace std;

int main() {
char letter1;
char letter2;
char letter3;

cout << "Three-letter domain names:" << endl;

letter1 = 'a';
while (letter1 <= 'z') {
    letter2 = 'a';
    while (letter2 <= 'z') {
        letter3 = 'a';
        ++letter2;
    }
    while (letter3 <= 'z') {
        cout << letter1 << letter2 << letter3 << ".com" << endl;
        ++letter3;
    }
    ++letter1;
}

return 0;
}

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Ваш третий l oop должен быть вложен в ваш второй l oop.

Но есть более простой способ, который имеет дополнительный бонус, что это также переносимый C ++ (ваше предположение, что нижний регистр письма соприкасаются это вопрос). По сути, это единый интегральный счетчик, преобразованный в основание 26 основ:

#include <iostream>
int main() {
    constexpr char alphabet[] = "abcedfghijklmnopqrstuvwxyz";
    constexpr std::size_t radix = sizeof(alphabet) - 1;
    for (std::size_t i = 0; i < radix * radix * radix; ++i){
        std::cout
            << alphabet[i / radix / radix]
            << alphabet[(i / radix) % radix]
            << alphabet[i % radix]
            << ".com\n"
        ;
    }
}
0 голосов
/ 22 апреля 2020

Третий l oop должен быть вложенным l oop второго, тогда как l oop. То есть должно быть три вложенных цикла.

Также, поскольку переменные letter1, letter2 и letter3 не используются вне циклов, лучше сделать их локальными переменными циклов. То есть лучше заменить циклы while на циклы.

Вот демонстрационная программа.

#include <iostream>

int main()
{
    std::cout << "Three-letter domain names:" << '\n';

    for ( char letter1 = 'a'; letter1 <= 'z'; ++letter1 ) 
    {
        for ( char letter2 = 'a'; letter2 <= 'z'; ++letter2 ) 
        {
            for ( char letter3 = 'a'; letter3 <= 'z'; ++letter3 ) 
            {
                std::cout << letter1 << letter2 << letter3 << ".com" << '\n';
            }
        }
    }
}   

Ее вывод

Three-letter domain names:
aaa.com
aab.com
aac.com
aad.com
aae.com
...

и т. Д. .

Обратите внимание на то, что в общем случае нет необходимости, чтобы буквы использовались друг за другом без пробелов в используемой системе кодирования.

...