• Как работает GetAsyncKeyState()?

    profesor08
    @profesor08
    https://docs.microsoft.com/en-us/windows/win32/api...
    проверяет состояние кнопки (нажата или нет) в момент вызова самой функции, в самом низу есть пример и еще ниже требования
    Ответ написан
    Комментировать
  • Как работает GetAsyncKeyState()?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Ну есть же подробная документация, там всё расписано.
    Ответ написан
    Комментировать
  • Как убрать мусор из char массива?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Что у вас за операция пересечения?

    Первая проблема - вы берете максимальную длину двух строк в size и потом проходитесь циклом до size по обеим строкам. Но ведь более короткой строки там просто нет - вы обращаетесь к не вашей памяти.

    Вам надо проверять, есть ли обе строки по индексу i, прежде чем сравнивать их.

    Вторая проблема - вы создаете result размером ровно на количество совпадений, а пишете туда в цикле до size. Т.е. если у вас вообще ни одного совпадения, то массив result будет пустым, но вы там можете хоть 10000-ый элемент записать, если строки достаточно длинные.
    Ответ написан
    Комментировать
  • Почему не работает часть программы?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да у вас непонимание базового синтаксиса. Нельзя делать свитч по нескольким переменным сразу. Там у вас запятая - это оператор, котоый возвращает последний элемент. Также в ифах.
    Ответ написан
    4 комментария
  • Как вывести десятичное число в десятичной системе в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Раз вам число нужно десятичное, то и задавайте его в десетичной системе, без ведущих нулей.

    Чтобы дополнить число нулями до заданной ширины при выводе воспользуйтесь setw и setfill:
    std::cout << std::setfill('0') << std::setw(4) << i1 << endl;
    Ответ написан
    Комментировать
  • Как завершить ввод строки без нажатия enter?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Программа должна считывать отдельные нажатия, а не ввод строки целиком.

    Каждый раз после нажатия ввод (строка) должен формироваться из ранее нажатых клавиш. Пока он не валидный - продолжать ожидать следующие нажатия. Как только ввод стал валидным - принять его.

    Такое обычно практикуют при вводе подтверждающего кода из смс. Как только ввёл нужное количество цифр и/или правильный код, принять его.
    Ответ написан
    Комментировать
  • Как перевести код в ООП c++?

    nazares
    @nazares
    Software Engineer
    Ответ написан
    Комментировать
  • Как решить эту ошибку?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Перепишите этот ужас с нуля. Там невозможно найти ошибку.

    Советую воспользоваться тем, что условные операторы вычисляются лениво: Если написать A && B и A окажется false, то B даже не будет вычисляться.

    Так, проверка на клетку сверху может быть написана так:
    if (i > 0 && a[i-1][j] - мина)

    Так вся ваша простыня выродится в 8 последовательных проверок. Если меняются обе координаты, то надо через && объединить 3 условия - 2 на проверку невыхода за границы массива, и последнее - проверка значения массива.

    Еще можно завести массив на SIZE+2 x SIZE+2 и заполнять его с (1, 1). Фактически, создается каемка вокруг исходного массива. И пробегаться по нему надо от 1 до SIZE. Так, вокруг всегда будут все 8 соседей. В этом подходе не придется проверять на выход за границы массива.

    А еще можно вместо 8 if-ов сделать цикл на 8 итераций, если завести константы для приращений:
    const int kDx[] = {1, 1, 1, 0, -1, -1, -1, 0};
    const int kDy[] = {1, 0, -1, -1, -1, 0, 1, 1};


    Теперь всех соседей можно перебрать как (i + kDx[k], j + kDy[k])
    Ответ написан
    Комментировать
  • Почему неправильно считывается строка?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    file.get() читает один символ, возвращает его и переходит к следующему символу ввода. Поэтому код:
    while (file.get() != ']')
    {
       temp += file.get();
    }


    читает первый символ, сравнивает со скобкой, потом приписывает в temp второй символ. Потом читает третий и, возможно, приписывает четвертый и т.д. Два вызова file.get() выполняют два чтения.

    Правильно делать так:

    while ( (с = file.get()) != ']')
    {
       temp += с;
    }


    И похожим образом обрабатывайте '[' перед этим. Читайте в переменную, сравнивайте и не забудьте прочтенный символ засунуть в строку.

    Ну, или используйте в условиях istream::peek.
    Ответ написан
    Комментировать
  • Какой самый простой компилятор C/C++?

    GavriKos
    @GavriKos
    Любой компилятор под это подойдет.
    Ответ написан
    4 комментария
  • Почему работает const, а не constexpr для char*?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Дело в том, что указанный слева квалификатор const относится к правой половине спецификации типа до первого модификатора.
    const char& - ссылка на константный символ. Квалификатор - const, модификатор - &.
    const char* - указатель на память константного символа. Квалификатор - const, модификатор - *.

    При этом, указанный справа квалификатор const относится ко всей части спецификации типа левее, включая все модификаторы.
    char* const - константный указатель на память символа.
    const char* const - константный указатель на память константного символа.
    char* const * - указатель на память константного указателя на память символа.
    char& const существовать не может, т.к. квалификаторы не применяется к ссылкам. Тут будет ошибка трансляции.

    И при чем же здесь constexpr? Просто constexpr всегда относится только ко всей спецификации типа со всеми модификаторами.
    const char* - указатель на память константного символа.
    constexpr char* - константный указатель времени компиляции на память символа. Тут нет ошибки, память символа тут считается модифицируемой.

    И если объект с типом constexpr char* получит характеристику ODR-used [?], то после трансляции кода это будет уже объект с типом char* const. Вот так.
    В то же время, строковые литералы имеют тип const char[N], т.е. статически определенный массив константных символов. Такой тип можно привести только к типу const char*.

    В результате, чтобы правильно определить константный указатель времени компиляции на память константного символа, нужно тип определить как constexpr const char*.
    И const в этом месте никакого прямого отношения к constexpr не имеет.
    Ответ написан
    Комментировать
  • Почему из двух функций, стоящих в условии цикла, при определенных условиях выполняется только одна?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Фокус в оптимизации логических операций.
    Если первый операнд AND имеет значение false, то результат будет false независимо от значения второго операнда. Соответственно, вычислять второй операнд смысла нет.
    Аналогично, если первый операнд OR имеет значение true, то результат будет true независимо от значения второго операнда.
    Если вам нужно, чтобы выполнялись обе функции, то решением, как ни странно, будет явный вызов обоих функций в теле цикла с записью результатов выполнения в переменные.
    Ответ написан
    Комментировать
  • Вызвано исключение: нарушение доступа для записи. **_Str** было 0x1110112. Что не так?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не выделена память для строки.
    P.S. И sizeof - это не длина строки.
    Ответ написан
    Комментировать
  • Как убрать нілики из ответа даного кода, ответ правильний только нулі виводить перед ответом?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Готов поклястся, что именно этот вопрос был задан вот тут.

    Но вы же, видимо, его и отредактировали, а теперь спрашиваете опять. Ответ там уже был мной дан.
    Ответ написан
    4 комментария
  • Можно ли сделать демона из программы, которая читает файл?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Да, можно.
    Ответ написан
    Комментировать
  • Как декодировать данное выражение?

    bingo347
    @bingo347
    Crazy on performance...
    Звездочка здесь относится к типу, а не к имени, и означает, что это указатель, просто синтаксис C позволяет здесь поставить пробел в любом месте (или не ставить его вовсе)
    По итогу, это функция match, которая принимает 2 аргумента - char и указатель на char, и возвращает так же указатель на char
    Ответ написан
    Комментировать
  • Как Вы обходитесь без "if"?

    maaGames
    @maaGames
    Погроммирую программы
    Количество строк кода не влияет на производительность. Пиши понятно, а не "решил написать тут, чтобы на одну строчку меньше было".
    Ответ написан
    Комментировать
  • Как Вы обходитесь без "if"?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Вообще принято while использовать когда неизвестно количество итераций, а for - когда известно.
    Ответ написан
    Комментировать
  • Как редатировать элемент QListWidget?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Вы документацию на этот виджет читали? Какие у вас есть варианты?

    В гугл запрос делали, хотя бы первую ссылку смотрели?
    Ответ написан
    Комментировать