Ответы пользователя по тегу C++
  • Есть ли бесплатный аналог C++ Builder?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    QtCreator, VisualStudio Comunity Edition, CodeBlocks, Eclipse

    Опять же, вам нужна IDE для разработки на сях вообще или именно со "встроенным конструктором формочек" ?
    Ответ написан
  • Создание файла txt и запись в него C++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    https://stackoverflow.com/questions/15667530/fstre...

    Про флаги можно подробнее почитать, внезапно, в документации https://www.cplusplus.com/reference/ios/ios_base/o...
    Ответ написан
    Комментировать
  • Как решить задачу на c++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    else if () {
        k = false;
        }

    Я не уверен как именно работает If с пустым условием. Есть у меня подозрение что никак и, соответственно, k не присваивается ничего и она остается с изначальным значением (т.е. неинициализированной и имеет какое угодно значение), а все что не ноль это true. (рекомендую научиться пользоваться отладчиком и самому пошагово посомтреть что на самом деле и почему делает ваша программа)

    Почему бы не написать просто
    else 
    {
        k = false;
    }


    И в качестве оффтопа - пожалуста не пишите операторные скобки в плюсах как в яве, это не ява.
    Ответ написан
  • Не запускается код на C++, что не так?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Visual Studio не может запустить вашу программу т.к. ей тупо нечего запускать - она не скомпилировалась. Читайте что вам пишет в выводе. Там будет понятно и однозначно написанно в чем вы не правы (покрайней мере применительно к вашему коду это 100% будет так)
    Ответ написан
    2 комментария
  • Что происходит с памятью?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Нет, конечно.

    Память так и будет висеть в куче "занятой" пока кто-то не вызовет для нее free()
    Ответ написан
    3 комментария
  • Матрица в матрице?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Что такое матрица в C/C++ ?
    Нету в C/C++ матриц, это математическое понятие, которое можно реализовать как просто "двумерный" массив. Точнее это или одномерный массив, у которого, как мы считаем, каждые N элементов новая "строка" или одномерный массив "строк", каждый элемент которого указатель на одномерный массив -строку.

    Что может быть элементом массива? Да что угодно, например указатель на что угодно, например на другой массив из прошлого вопроса (который мы интерпретируем как матрицу).

    Что касается чисто C++ емнип в stl нет стандартный объектов для 2-мерных или N-мерных массивов, но можно использовать одномерные массивы вышеназванным способом (к сожалению не знаю есть-ли многомерные массивы в бусте, но скорее всего тоже нет)
    Ответ написан
    Комментировать
  • Почему программа не заходит в цикл?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Не хватает определения it.getName() и name, но я и так предполагаю (хотя без нужных кусков кода не могу быть уверенным на 100%) почти наверняка программа заходит в цикл, обходит весь список menu, и каждый раз на условии it.getName() == name сравнивает адреса (а они наверняка разные), хотя вам, наверное, нужно сравнить непосредственно содержимое.

    Попробуйте https://www.cplusplus.com/reference/string/string/...
    Ответ написан
    Комментировать
  • Как вывести кирилицу в консоль?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    А можно конкретно перечислить что "все" вы пробовали.

    Т.к. кириллица в консоли все-таки работает там, где надо - вы явно не все способы перепробовали.

    Начнем по порядку - что команда chcp 1251 > nul, по вашему, должна сделать? Для чего вы ее дергаете?

    Далее - какую кодировку "пытается" использовать консоль, а в какой кодировке исходное сообщение?

    spoiler
    Судя по кракозябрам текст в исходниках, скорее всего, в utf-8, а консоль хочет какую-то однобайтную кодировку, возможно даже cp1251, но это не точно
    Ответ написан
  • Как поместить Windows окно в DLL файл в Visual Studio 2019?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Если язык умеет вызывать DLL, то в чем проблема подключить виндовые DLL и рисовать окна?

    C++, если что, тоже "не умеет рисовать окна", просто в студию встроены обвязки поверх winapi.
    Ответ написан
  • Как усовершенствовать (переделать) конвектор валют в С++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Вцелом и так пойдет (если задание, как вы сказали, на if`ы).

    А вообще из критики/рекомендаций:
    1.
    Напишите программу для перевода гривен, рублей и юаней в доллары.

    Ваша программа делает ровно наоборот - переводит из долларов в гривны/рубли/юани.

    2. Использовать вместо букв 'r'/'u'/'c' международные коды валют https://ru.wikipedia.org/wiki/ISO_4217
    Вам потребуется работа со строками. Это 100% есть где-то дальше по ходу учебника, так что просто читайте дальше, не зацикливайтесь на этом задании.

    3. Избыточно конкретно для этого задания, но для практики полезно - Сделать валюту с помощью классов.
    Как минимум нужны методы типа конвертации в строку, перегрузки операторов << >> и арифметических операторов и плюс функциями вида convertTo(std::string currencyName)
    Опять же 146% что вся вторая половина учебника про ООП, так что нет смысла тратить на это время сейчас.

    4. Ну и, на всякий случай, не используйте числа с плавающей запятой для работы с деньгами (или других сущностей, когда вам важна точность) если что-то серьезное пишете, а то, знаете-ли 0.1 + 0.2 != 0.3. В это проге это не важно, не нужно переделывать, но как минимум знать почему так происходит нужно.
    Нормальный учебник по-идее должен объяснять особенности чисел с плавающей точкой
    Ответ написан
    Комментировать
  • С++ не создаёт файл без прав администратора?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Файл должен создаваться самой программой?

    А если программу отдельно запустить без прав админа файл создатся?
    А если сделать это в другой папке (например не в programm files) ?

    Путь содержит не латинские символы (например кирилицу) ?

    Можете написать минимальную программу, воспроизводящую проблему и выложить исходник?
    Ответ написан
    Комментировать
  • Почему программа падает при вводе отрицательного числа?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Вы объявляете массив нулевого размера (не поверю что компилятор вам об этом не показал ворнинг), а потом пытаетесь писать куда-то. Вообще странно что она у вас не всегда падает т.к. должна падать с сегфолтом при любом введённом N от 1 до 1000.

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

    p.s.
    Ну и на будущее - а не лень вам будет вбивать каждый раз руками исходные данные? проще читать их из файла или передавать в командной строке.

    p.p.s.
    И на будущее не плохобы научиться читать варнинги и ошибки компилятора. А если что-то спрашиваете приводить их текст, а так же введенные вами входные данные, полученный результат и какой результат по-вашему должен был быть. (например ввел 1, 2, 3, 4. Должен был получить 10, а получил 5.)
    Ответ написан
    1 комментарий
  • Имеет ли смысл учить C++ для GameDev в 2020?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Посмотрите какие сейчас нынче более-менее ходовые движки и что нужно чтобы с ними работать и сами найдете ответ.

    Ответ для лентяев

    А мож оно вам и не надо, раз сами найти ответ не можете?

    Ответ для целеустремленных лентяев.
    Да, нужно


    Ответ написан
    Комментировать
  • Почему может не создаваться конструктор?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    "Замечательный" код. Только прежде чем выкладывать, было бы не плохо убедиться что на нем эта ошибка воспроизводится.

    Сделайте минимально-возможный код, на котором у вас возникала бы проблема, в решении которой вы просите помощи. Вполне вероятно, что в процессе создания такового вы внезапно найдете свою ошибку (мож вы, например, стек вызовов где-то перед вызовом конструктора попортили).
    А если сделать простой пример, где возникает ошибка, не получается - значит вы не правильно понимаете где она возникает и вероятно она где-то в "нагромождении", которое не получается из примера выкинуть.
    Ответ написан
    Комментировать
  • Сколько бит(байт) занимают типы данных с плавающей запятой в C++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    int занимает 4 байт

    Не всегда. Зависит от платформы. Вы всегда можете проверить написав sizeof(int), sizeof(double) и т.п.

    Но в случае с double можно задать абсолютно любое число,да еще и указать множество цифр после запятой.Как это работает?


    Числа с плавающей точкой (запятой) имеют ограничение по точности. Т.е. В общем случае A + B ≈ С;
    Ответ написан
    Комментировать
  • Какие есть книги по C++?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Стандартный набор, который обычно советуют: Страутступ и Шильдт
    Ответ написан
    Комментировать
  • Работа с изображениями на С++, какую выбрать библиотеку?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Если это BMP - то все проще некуда - открываете картинку и все, кроме заголовка - тупо RGB в сыром виде.

    Если что-то кроме BMP - то что вообще мешает загуглить библиотеку для нужного вам формата файлов? Их много, и они легко гуглятся. Вот например https://github.com/LuaDist/libjpeg для jpeg
    Ответ написан
    Комментировать
  • Как правильно отправить в поток функцию?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    ЕМНИП в Qt с гуями можно работать только в основном потоке. Т.е. какие-то "тяжелые" или блокирующиеся чем-либо действия нужно делать в отдельном потоке, а потом через сигналы дергать функции в основном потоке, чтобы они меняли состояние гуев.
    Ответ написан
    Комментировать
  • Почему профилировцика памяти не совпадают с реальным использованием RAM?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Предположу что, возможно, на уровне системы какай-нибудь "ленивый" алгоритм выделения памяти и отладчик может показывать реальное колличество уже аллоцированной памяти.
    Ответ написан
  • Реализация конечного цикла без проверки условия выхода?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Нет не возможно. У вас в любом случае будет условие. Чисто логически чтобы цикл кончился он должен кончится по какой-то причине, в отсутствии причины он не кончится.

    Другое дело, что можно кончить цикл всячески, не только "адекватно". Теоретически вы можете поменять значение PC регистра (Хотя емнип на x86 его нельзя редактировать напрямую). Но опять же если вы просто поменяете безусловно - это не цикл у вас получится, а если условно - вот вам условие выхода.

    p.s.

    У вас вообще цикла нет - вы используете (в сильно неявном,извращенном виде) рекурсию. И она тоже буде или бесконечной (пока стек не кончится) или с условием прерывания.

    p.p.s.
    А вообще не занимайтесь ерундой.

    По воводу того, как оно работает:
    Смотрим этот кусок кода:
    (arg / N) * ((int)CycleEnd - (int)CycleIteration)
    Вы вычитаете разницу между адресами функций CycleIteration и CycleEnd (я так понимаю, там должно получится -1 * sizeof(void*). Затем вы это умножаете (arg / N) (вы делите целое число на целое число, емнип оно округляется в меньшую сторону, а не по правилам математики). Кроме последней итерации (когда arg = N) у вас будет результат ноль. Т.е. вы от указателя CycleIteration отнимаете 0 и присваиваете это ptr.
    Фактически (кроме последней итерации) ptr указатель на функцию CycleIteration (вы ее вызываете рекурсивно).
    Когда arg == N вы умножаете ваш -1 * (sizeof(void*)) на 1 и таким образом вы присваиваете ptr значение CycleIteration - 1*sizeof(void*) т.е. на CycleEnd.

    Вообще этот код работает ровно по двум причинам:
    1. Вы не уперлись в размер стека в вашей рекурсии (как я говорил выше это рекурсия).
    2. Вам повезло, что функции в памяти расположены так же, как и в коде. Если линковщику вздумается поменять их местами - ваш код не будет работать (так, как вы ожидаете).
    Ответ написан
    2 комментария