@Ne_Gr1tos

Код на си начинает бесконечный цикл. Что делать?

Не знаю как сформулировать правильно, но при вводе цифр бесконечный цикл ввода слова $CMD не начинается, как только я ввожу букву начинается бесконечный повтор слова. Пишу что-то по типу командной строки. Код для ознакомления:

#include <stdio.h>

int main()
{
    int password;
    int sign_password;

    char intype;
    
    int directory = 2;


// 1
    void CreatePassword()
    {
        system("clear");
        printf("\nCreate your password: ");
        scanf("%d", &password);
        
        while (1)
        {
            printf("Password is created.\nRecreate password?\n\n1.Yes\t2.No\t");
            scanf("%d", &intype);

            if (intype == 1)
            {
                CreatePassword();
            }
            if (intype == 2)
            {
                break;
                directory = 2;
            }
            else
            {
                printf("\nUnknown command!\n ");
            }
        }        
    }


    void CommandLine()
    {
        printf("$CMD: ");
        scanf("%d", &intype);
    }


    void Terminal()
    {
        while (1)
        {
            // Directory system
            switch (directory)
            {
                case 1:
                    CreatePassword();
                case 2:
                    CommandLine();
            }
        }
    }

    Terminal();
}
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Первое.
Не стоит определять функции внутри main() - определения функций следует вынести выше main().
scanf("%d", &password);
Что будет, если:
- я введу не число?
- я ничего не введу (пустую строку)?
- я введу строку типа "123 123"?
if (intype == 2)
            {
                break;
                directory = 2;
            }

directory никогда не получит значения 2, потому что break - команда немедленного выхода из цикла.

Скорее всего из-за этого и бесконечный цикл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы