Вопрос Помогите укоротить код. Включение и выключения кода.

Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Привет. Как сделать так, что бы я мог включать и выключать код. По нажатию кода.
В моих мыслях сгенерировался такой код.
Как сделать его меньше, или возможно есть альтернатива?
C++:
#include <iostream>
#include "windows.h"

using namespace std;
int counter = 0;
bool chek = true;
int main()
{
    while(true)
    {
        if(GetAsyncKeyState(0x4C))
        {
            if(chek)
            {
                if(counter == 0)
                    {
                        counter = 1;
                        cout << "Enable\t" << counter << endl;
                    }
                 else if(counter == 1)
                    {
                        counter = 0;
                        cout << "Disable\t" << counter << endl;
                    }
            }
            chek = false;
        }
        else if (!GetAsyncKeyState(0x4C))
        {
            chek = true;
        }
    }


    return 0;
}
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Как сделать его меньше, или возможно есть альтернатива?
Код:
#include <iostream>
#include "windows.h"

using namespace std;

bool enabled = false;

int main()
{
    while (true)
    {
        if (GetAsyncKeyState('L') & 1) // если младший бит выставлен значит была нажата по сравнению с предыдущей проверкой
        {
            enabled = !enabled;
            cout << (enabled ? "Enable" : "Disable") << endl;
        }
        Sleep(1); // чтобы меньше нагружать процессор
    }

    return 0;
}
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Код:
#include <iostream>
#include "windows.h"

using namespace std;

bool enabled = false;

int main()
{
    while (true)
    {
        if (GetAsyncKeyState('L') & 1) // если младший бит выставлен значит была нажата по сравнению с предыдущей проверкой
        {
            enabled = !enabled;
            cout << (enabled ? "Enable" : "Disable") << endl;
        }
        Sleep(1); // чтобы меньше нагружать процессор
    }

    return 0;
}
Спасибо, как я понимаю внутри тернарной операции можно вызывать функции?
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
как я понимаю внутри тернарной операции можно вызывать функции?
Да, при условии что у них совпадает возвращаемое значение, т.к. в отличии от обычного if else тернарная операция все таки формирует выражение, у которого может быть только один тип данных, т.е. void Func1() и int Func2() нельзя использовать вместе только если не привести к (void) результат вызова Func2.
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Да, при условии что у них совпадает возвращаемое значение, т.к. в отличии от обычного if else тернарная операция все таки формирует выражение, у которого может быть только один тип данных, т.е. void Func1() и int Func2() нельзя использовать вместе только если не привести к (void) результат вызова Func2.
Хорошо если что отпишусь.
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
#include <iostream>
#include "windows.h"

using namespace std;

bool enabled = false;

int main()
{
    while (true)
    {
        if (GetAsyncKeyState('L') & 1) // если младший бит выставлен значит была нажата по сравнению с предыдущей проверкой
        {
            enabled = !enabled;
            cout << (enabled ? "Enable" : "Disable") << endl;
        }
        Sleep(1); // чтобы меньше нагружать процессор
    }

    return 0;
}
Так не будет работать.
Когда условие будет == 0, в консоль ничего выводится не будет.

C++:
int main()
{
    while (true)
    {
        bool enabled = false;
        if (GetKeyState('L'))
             enabled = true;
        
        cout << (enabled ? "Enable" : "Disable") << endl;
        Sleep(1); // чтобы меньше нагружать процессор
    }
    return 0;
}
Типо такого плана надо.
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Так не будет работать.
Когда условие будет == 0, в консоль ничего выводится не будет.

C++:
int main()
{
    while (true)
    {
        bool enabled = false;
        if (GetKeyState('L'))
             enabled = true;
       
        cout << (enabled ? "Enable" : "Disable") << endl;
        Sleep(1); // чтобы меньше нагружать процессор
    }
    return 0;
}
Типо такого плана надо.
Спасибо, попробую.
 
Начинающий
Статус
Оффлайн
Регистрация
24 Май 2020
Сообщения
197
Реакции[?]
25
Поинты[?]
0
Типо такого плана надо.
Тут по моему мнению немного не то (или просто опечатка), т.к тут в каждой новой итерации enabled будет равно false. А при условии нажатия и вовсе теряет всякий смысл (можно просто сделать условие на нажатие клавиши без всяких переменных). Мне кажется, что нужен код для так называемого переключателя.
C++:
bool enabled = false; // Объявляем переменную вне цикла для хранения нашего значения.
int main()
{
    while (true) // Бесконечный цикл
    {
        if (GetKeyState('L')) // Проверяем на нажатие клавиши
             enabled = !enabled; // Присваиваем переменной значение равное обратному значению.
        if(enabled)
        {
            // Что-то делаем
        }
        Sleep(1); // Ждём

    }
    return 0;
}
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Тут по моему мнению немного не то (или просто опечатка), т.к тут в каждой новой итерации enabled будет равно false. А при условии нажатия и вовсе теряет всякий смысл (можно просто сделать условие на нажатие клавиши без всяких переменных). Мне кажется, что нужен код для так называемого переключателя.
C++:
bool enabled = false; // Объявляем переменную вне цикла для хранения нашего значения.
int main()
{
    while (true) // Бесконечный цикл
    {
        if (GetKeyState('L')) // Проверяем на нажатие клавиши
             enabled = !enabled; // Присваиваем переменной значение равное обратному значению.
        if(enabled)
        {
            // Что-то делаем
        }
        Sleep(1); // Ждём

    }
    return 0;
}
Спасибо я очень рад что вы все помогли, но лучший код у Debounce.
Вообще я хотел однократное выполнение, типо первый раз нажать, включить антиотдачу записать байты в память целевого процесса, и выключить записать оригинальные данные обратно.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Сверху Снизу