Ответы пользователя по тегу C++
  • Выводит лишние символы в консоль C++. Что делать?

    @res2001
    Developer, ex-admin
    Видимо, лишние символы это
    cout << "Ћ";
    Исходный код, видимо, сохранен в UTF-8 и этот символ выходит двухбайтовый, а кодировка консоли, видимо, стандартная - 866 или 1251.
    Ответ написан
  • Как преобразовать массив char в массив int?

    @res2001
    Developer, ex-admin
    1. Если что char - это целый тип, можно напрямую, без явного приведения типов сравнивать с int.
    В вашем случае в нем хранится не символ, а ASCII код символа, т.е. просто целое число. Но с тем же успехом можно туда записать любое другое число входящее в диапазон возможных значений:
    char c = 10;
    2. Приведение типов в стиле Си выглядит так: (int)K[i]
    3. Для преобразования ASCII кода в число используйте вариант, предложенный sergio_nsk
    или так K[i] - '0'
    или можно массиву L присваивать непосредственно коды символов, а не числа от 0-9 (и не важно, что массив int, а не char)
    L[0] = '0';
    L[1] = '1';
    Тогда можно сравнивать без преобразований.
    Ответ написан
    Комментировать
  • Что не так в реализации моего метода?

    @res2001
    Developer, ex-admin
    Вы же умеете пользоваться отладчиком. Он вам лучше все скажет, чем кто-нибудь тут.
    Предположительно выход за границу диапазона.
    Возможно ошибка не в этом участке кода, здесь она просто проявляется.
    Думаю, что при удалении элемента нужно декрементировать не только m_size, но и i.

    PS: Я бы рекомендовал при создании нового узла обнулять указатель на следующий элемент, тогда определить конец списка можно просто по нулевому указателю и везде перед переходом на следующий элемент проверять не пустой ли он.
    Заведите переменную для хранения предыдущего узла, тогда избавитесь от внутреннего цикла, а накладных расходов минимум.
    Ну и код я бы немного реструктурировал, а то два одинаковых if идущих друг за другом режут глаз.
    Комментарии, по большей части, "ни о чем".
    Ответ написан
    Комментировать
  • Как сформировать блоки по 32бита из произвольного объема входных данных?

    @res2001
    Developer, ex-admin
    1) узнать размер файла, выделить буфер под размер файла и прочитать файл оптом. Но могут быть проблемы, если файл очень большой.

    2)64 бит - 8 байт
    32 бит - 4 байта
    Представлять можно целыми числами, например с помощью union схематично так:
    #include <inttypes.h>
    ...
    typedef union {
      uint64_t val8;
      uint32_t val4[2];
    } block;
    ...
    uint8_t * readdata; 
    // Выделяем память под массив байт readdata и читаем в него 8 байт из файла (опущено)
    ....
    
    block * b = (block*)readdata;
    // После этого в
    // b->val8 - 64 битовый блок
    // b->val4[0] и b->val4[1] - два 32 битовых блока
    Ответ написан
    2 комментария
  • Как записать функцию макрасом?

    @res2001
    Developer, ex-admin
    #define fun(v, h) sqrt((h.x*h.x) + (h.y*h.y) + (h.z*h.z))
    Ответ написан
  • Как добавить компилятор Visual Studio C++ в powershell\cmd?

    @res2001
    Developer, ex-admin
    Со студией поставляется комплект командных сценариев, настраивающих окружение командной строки для работы компилятора. Достаточно командную строку запускать через эти сценарии. Ярлыки на эти сценарии находятся в меню Пуск в папке студии.
    Например у меня для VS2017 есть такие:
    x64 Native Tools Command Prompt for VS 2017
    x86 Native Tools Command Prompt for VS 2017
    Соответственно для 64битной и 32битной сборки приложений. В 2015 студии есть аналогичные, только название немного изменено.
    Запускайте ком.строку через этот сценарий и все будет собираться.
    Ответ написан
    2 комментария
  • Как компилировать проект на Boost.python?

    @res2001
    Developer, ex-admin
    Похоже это статическая библиотека boost.python, видимо нужно собрать ее или взять уже собранный бинарник подходящей разрядности и добавить в опции компилятора.

    PS: год назад, то же делал модуль для питона, только на голом Си. Вполне успешно.
    Ответ написан
  • Почему при смене кодировки консоли затрагивается только часть текста?

    @res2001
    Developer, ex-admin
    У вас часть исходников в кодировке 1251, а часть в UTF-8.
    Проверить - откройте исходники, например в Notepad++ - он и кодировку покажет и перекодировать умеет.
    Ответ написан
    3 комментария
  • Компиляция makefile под MVS 2017?

    @res2001
    Developer, ex-admin
    Лучше скомпилируйте в mingw стандартными средствами с помощью make.
    Либо вручную сконвертируйте его в формат nmake. nmake по сути тот же make, но сильно обрезанный в плане синтаксиса. Простые make файлы могут собираться с помощью nmake напрямую.
    Запустите командную строку VC и дайте команду:
    nmake /f makefile
    Ответ написан
    Комментировать
  • Как обрабатывать все элементы макроса?

    @res2001
    Developer, ex-admin
    Универсальный вариант на макросах не сделать, имхо.
    Ответ написан
    3 комментария
  • Как вывести в XCode на C++ символы ASCII?

    @res2001
    Developer, ex-admin
    Какое-то другое число - это то же число в восьмеричной системе счисления.
    Чтоб выводились символы, а не числа, попробуйте так:
    cout << (unsigned char)218;
    Ответ написан
    3 комментария
  • Сделать голосового бота для Excel?

    @res2001
    Developer, ex-admin
    В excel есть встроенный язык программирования если что - VBA.
    Но зачем такие сложности с голосом?
    Если вводите руками, то сканер и хорошая OCR вам поможет.
    На сколько я понимаю, вводите из накладных или счетов, т.е. из стандартизированных форм, можно взять ABBYY FineReader Form настроить в нем свою форму + потоковый сканер и вводится все будет практически на автомате, со скоростью работы сканера. FineReader умеет сохранять в разнообразные форматы dbf, csv, ... в excel, по моему, то же умеет, но это и не обязательно.
    Если форма с которой вводите не соответствует форме в Excel, то нужно будет в вашей Excel таблице написать макрос импорта из полученных форм.
    Все это в итоге будет быстрее и дешевле, чем писать на шарпе голосовую вводилку информации.

    Из проблем - любая система сканирования критична к качеству оригинала. Если вы вводите информацию с салфеток исписанных карандашом от руки, то этот вариант не прокатит.

    PS: Во многих банка бумажные платежки именно так попадают в обработку, правда для банков есть специализированная версия FineReader Form - FineReader Bank там уже есть готовые шаблоны банковских форм.
    Ответ написан
    Комментировать
  • Проблема с С++ и с решение задач?

    @res2001
    Developer, ex-admin
    Если не можете решить задачу, попытайтесь найти решение в интернете или спросите тут.
    После того как задача будет решена, нужно понять почему вы не смогли ее решить (в чем была ваша ошибка) и как решили ее другие.
    Наберетесь опыта и все будет нормально.
    Ответ написан
    Комментировать
  • Подсчет суммы элементов в каждом столбце двумерного массива?

    @res2001
    Developer, ex-admin
    Обнуляйте sum в начале первого цикла.

    PS: блин, кто вас учит делать вот такие вот двумерные массивы? Вчера то же был вопрос по С++ и то же с аналогичными двумерными массивами. Почитайте про адресную арифметику или научитесь пользоваться стандартными контейнерами stl, чтоб не городить это извращение.
    Ответ написан
    Комментировать
  • Непонятная ошибка доступа к памяти winAPI. Как решить?

    @res2001
    Developer, ex-admin
    1.НА КАЖДУЮ ОПЕРАЦИЮ NEW ДОЛЖНА БЫТЬ СООТВЕТСТВУЮЩАЯ ОПЕРАЦИЯ DELETE.
    У вас явно не хватает delete в разных местах.
    2.Использовать двумерные массивы так как вы их используете ... ну это извращение какое-то. Сейчас именно так учат? Я понимаю, что удобно делать [i][j] ... но есть же адресная арифтметика, разъименование. И можно легко перейти от указателя на двумерный массив, к указателю на одномерный и использовать индексацию на одномерном массиве.
    3.Не нужно выделять память на каждой итерации цикла - достаточно выделить в самом начале массив максимального размера, а дальше использовать его внутри цикла на всех итерациях.
    4.Обычно как раз рекурсия более прожорлива к памяти (да и к ЦПУ), чем итерационный метод, т.к. рекурсией съедается стек и если большая вложенность, то стек может кончится.

    PS: про ошибку памяти: запустите программу под отладчиком, она прервется, когда произойдет ошибка, в отладчике сможете перейти в последнюю вашу функцию (по стеку вызовов) и посмотреть где-что не так (я надеюсь вы не думаете, что ошибка действительно в lineTo).
    Ответ написан
    2 комментария
  • Как совместить рандомное заполнение массива и поиск простого числа в нём?

    @res2001
    Developer, ex-admin
    1.У вас в is_prime должно быть 2 вложенных цикла: 1 цикл по элементам массива, второй (вложенный) от 2 до a[i] - проверка на простое число. Сейчас - только один и тот не правильный (из-за индексации).
    2.И разберитесь с индексацией массива, похоже вы не понимаете, что делаете.
    Ответ написан
  • WinPcap статическая линковка?

    @res2001
    Developer, ex-admin
    Winpcap это же не только приложение, а еще и системный драйвер, реализующий виртуальный сетевой адаптер (на сколько я знаю). Клиентскую часть, вы конечно можете линковать статически, а драйвер - по любому отдельная сущность.
    Ответ написан
    Комментировать
  • Как проверять вывод cin?

    @res2001
    Developer, ex-admin
    Читайте в строку или 1 символ и анализируйте каждый введенный символ.
    Сейчас вы непосредственно читаете int.
    Ответ написан
    Комментировать
  • Как изменить значение поля enum в рантайме?

    @res2001
    Developer, ex-admin
    enum - это константы.
    Если у вас всего 2 варианта значений, то добавьте в enum дополнительные значения:
    enum class Foo{qqq = 0, www = 1, qqq1 = 5, www1 = 10 };
    Если больше - нужно менять схему и использовать не enum.
    Ответ написан