Ответы пользователя по тегу C++
  • Почему Qt creator выводит ошибку?

    @res2001
    Developer, ex-admin
    Может потому что вы пытаетесь скормить компилятору С++ код на питоне?
    Ответ написан
  • Как быть с отладкой внутренностей Qt?

    @res2001
    Developer, ex-admin
    Откомпилируйте себе версию с отладочной информацией и наслаждайтесь полноценной отладкой.
    Ответ написан
    Комментировать
  • Как решить задачу с массивом NxN?

    @res2001
    Developer, ex-admin
    0.Оформление кода жуткое, не читабельно совсем.
    1.Выделяйте память сразу для всего массива размером b*c - не зачем дробить каждую строку. Обычно динамическое выделение памяти достаточно дорогостоящая процедура (сейчас то вам это не принципиально).
    2.Забудьте про оператор goto. Единственное место, где его оправданно использовать это выход из глубоких вложенных if или циклов, но даже это можно решить другими способами, правда обычно более затратно, чем goto. В данном случае у вас он используется правильно, но ведь есть break для вашего случая, а это гораздо лучше, чем goto.
    3.В общем и целом у вас почти все верно. Но:
    Строка 80 явно лишняя:
    int g[i];
    Т.к. вы объявляете g[] выше. И кстати выше (в 71 строке) объявляете его не правильно, т.к. переменной e не присвоено никакое значение к моменту ее использования.
    4.В последнем цикле вы видимо пытались сделать сортировку - не получилось. Попробуйте еще раз. И нужно сначала отсортировать, а потом вывести. По другому не получится.
    Возможно вам придется сделать g[] не массивом intов, а массивом структур, где в каждой структуре будет содержаться "сумма четных отрицательных элементов каждой строки" и в другом элементе структуры - индекс строки. Сортировать нужно будет массив структур по сумме.
    5.Про остальное писать не буду, т.к. на решение задачи не влияет.

    Желаю удачи!
    Ответ написан
    6 комментариев
  • TCP/IP: что делать, если в процессе чтения сервером пакета от клиента пропадает интернет?

    @res2001
    Developer, ex-admin
    В общем целиком поддерживаю Smithson и Олег Цилюрик
    Проверяйте коды ошибок, возвращаемые методами передачи/приема. При работе с сетью всегда нужно закладываться на то, что передача или прием пройдет с ошибкой или будут приняты/переданы не все данные.
    Т.е. фактически вы должны писать программу исходя из того что ошибки приема/передачи не то что возможны, а они точно будут всегда.
    И да, кастомные keep-alive для TCP - это полная фигня - в протоколе уже все реализовано.
    Ответ написан
    5 комментариев
  • Переопределить operator() для получения доступа к члену класса?

    @res2001
    Developer, ex-admin
    Может вас устроит наследование вашего Window от Graphics?
    Эффект от наследования точно такой какой вы хотите получить другими способами.
    Ответ написан
  • Как посчитать сумму с помощью thread?

    @res2001
    Developer, ex-admin
    Вы в каждом потоке считаете полную сумму, а надо в каждый поток передавать свой диапазон n0-n1, отличный от других. И избавьтесь от мьютексов - выделите для каждого потока свое место куда он будет складывать сумму. Это намного увеличит производительность. После того как все потоки отработают в главном останется только сложить суммы.
    Кстати, можете посмотреть в сторону OpenMP - эта библиотека для подобных задач хорошо подходит.
    Ответ написан
    2 комментария
  • Как повысить свои навыки программирования на С/С++?

    @res2001
    Developer, ex-admin
    Найдите работу программистом. В коллективе и на реальной задаче гораздо быстрее оттачиваются навыки.
    Ответ написан
    Комментировать
  • Можно ли написать в Microsoft Visual Studio 2015 на языке C без C++?

    @res2001
    Developer, ex-admin
    Есть соответствующий параметр в настройках проекта: С/С++ -> Advanced -> Compile As (параметры компилятора /TP или /TC).
    Ответ написан
    Комментировать
  • Как быстро разобратся в сишном коде?

    @res2001
    Developer, ex-admin
    Начните разбираться в коде, уже через неделю другую плотной работы станете довольно бегло понимать что пытался сказать разработчик своим кодом.
    Си сам по себе очень простой язык, самая сложная вещь в нем - указатели, стоит что-нибудь почитать на эту тему, все остальное не сильно отличается от других языков.
    Соберите софт с отладочной информацией и погоняйте под отладчиком, обычно отладчик выдает сообщения про утечки памяти при завершении программы, это может дать толчок для поиска мест где возможны утечки.
    Так же можно воспользоваться каким-либо анализатором кода. Но там, скорее всего, будет много второстепенных ошибок и из всего их обилия придется долго и нудно выделять те что действительно важны на данном этапе.
    Ответ написан
    Комментировать
  • Как прочитать из консоли LPCWSTR?

    @res2001
    Developer, ex-admin
    Если на чистом WinAPI, то надо сначала получить кодировку консоли (GetConsoleCP) (в русской винде она как правило 866 или 1251), прочитать строку в обычный PSTR, а затем преобразовать в PWSTR с помощью WideCharToMultiByte. Кодировка консоли нужна, чтоб передать ее в WideCharToMultiByte.
    wcin - делает это все сам.
    Ответ написан
    1 комментарий
  • [С++ ]Поставил begin — поставь и end. Как распознать вложения и правильно поставить в коде end?

    @res2001
    Developer, ex-admin
    Никак.
    Если бы можно было легко предугадывать куда вставить end, то все компиляторы давно бы этим занимались, а они почему то этого не делают, а только выдают сообщение об ошибке при этом, как правило указывается строка даже близко не указывающая на то место где не хватает endа.
    И прочитайте внимательно задание - вам не надо вставлять end. Делайте как компилятор - считаете количество begin и end, если не равно - ошибка.
    Ответ написан
    5 комментариев
  • Перемещение по текстовому файлу?

    @res2001
    Developer, ex-admin
    Если опасаетесь читать файлы целиком можно использовать механизм файлов отображаемых в память.
    Ответ написан
    Комментировать
  • Что означает эта строка? Ее предназначение?

    @res2001
    Developer, ex-admin
    Операция с присваиванием 0 именно в такой форме тут совершенно лишняя, т.к. fgets на предыдущем шаге и так уже записала 0 в конце строки. Если бы этого не было, то strlen не смогла бы вычислить корректную длину строки.
    Я бы еще понял что-то подобное: search_for[79]=0; - подстраховка от переполнения буфера, хотя и это излишне, если понадеяться на корректную работу fgets. Но ведь, скорее всего, мы не будем проверять каждую реализацию fgets, поэтому такой оператор кажется более логичным, чем тот что приведен в примере.
    Ответ написан
  • Как осуществить деление строки на 2 подстроки в С++?

    @res2001
    Developer, ex-admin
    По ссылке ниже целая пачка рецептов split:
    stackoverflow.com/questions/236129/split-a-string-in-c
    Метода split нет в std::string, на сколько я знаю. Возможно, вы пользуетесь объектом String не из стандартной библиотеки.
    Ответ написан
    Комментировать
  • Как проинтегрировать (найти первообразную) цифрового сигнала на C++?

    @res2001
    Developer, ex-admin
    Проинтегрировать тут не выйдет, поскольку сигнал конечный, а для интегрирования подавай бесконечный.
    Если вы хотите получить спектр сигнала в частотной области, то вам нужно быстрое преобразование Фурье (FFT). Можете начать отсюда: www.fftw.org
    Во многих математических библиотеках есть реализации, например в Intel Math Kernel Library.
    Ответ написан
    Комментировать
  • Передача узла дерева?

    @res2001
    Developer, ex-admin
    У операции разыменования приоритет ниже, чем у операции выбора элемента по указателю, т.е. в вызове *root->next.push_back(node); порядок операций такой *(root->)next.push_back(node);, что, видимо, не то что вы хотели, расставьте скобки так: (*root)->next.push_back(node); и будет счастье.
    А вообще, какой смысл в On_BG передавать указатель на указатель? Судя по коду достаточно просто указателя, а еще лучше - ссылки.
    Ответ написан
    Комментировать
  • В чем разница между ссылкой на объект и член-данных объекта?

    @res2001
    Developer, ex-admin
    Ссылка это не адрес, адрес это указатель.
    n_Name объявлено видимо, как String *n_Name - т.е. n_Name - указатель, поэтому обращаясь c.n_Name вы получаете адрес объекта.
    Воспринимайте ссылки как псевдонимы (алиасы) существующих переменных. Обращаться со ссылками следует как с обычными переменными, а не как с указателями.
    Ответ написан
    Комментировать
  • Почему перезаписываются данные в структуре?

    @res2001
    Developer, ex-admin
    Отладчик должен помочь в вашей беде.
    Ответ написан
    Комментировать
  • Выдает ошибку при компиляции C++, Как решить?

    @res2001
    Developer, ex-admin
    Какая ошибка то?
    У вас подозрительные какие-то символы » и «. Если они же и в реальном коде, то это не правильно - правильно >> и <<.
    Ответ написан
    1 комментарий
  • Замена в строке одного символа на другой, как сделать на Си?

    @res2001
    Developer, ex-admin
    Хорошо бы в editString в конце еще дописывать '\0'. В таком виде как сейчас работает, пока массивы в стеке, стоит их начать выделять динамически и это у вас всплывет.
    И заменить "new" на другое имя, т.к. new является служебным словом в С++, а от Си до С++ один шаг фактически :)
    Ответ написан
    Комментировать