Ответы пользователя по тегу C++
  • Как реализовать реакцию на комбинации клавиш?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    if (S && D) {
      functino3();
    } else if (S) {
      function1();
    } else if (D) {
      function2();
    }
    Ответ написан
    Комментировать
  • Как нормально сделать перемещение по диагонали (sfml)?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Считайте вектор скорости и потом делите на его длину. В зависимости от зажатых кнопок прибавляйте или вычитайте speed из vx или vy (которые изначально 0). Потом, после проверок, делите оба числа на sqrt(vx*vx+vy*vy) (если оно не 0) и сдвигайте спрайт на vx, vy.

    Можно соптимизировать - прибавляйте 1/-1 вместо speed. Тогда значение vx*vx+vy*vy может быть только 0,1 или 2. Заведите константный массив kScaleCoef[3] = {1, 1, sqrt(2)} и потом делайте
    Sprite.Move(speed/kScaleCoef[vx*vx+vy*vy]*vx, speed/kScaleCoef[vx*vx+vy*vy]*vy);
    Ответ написан
    Комментировать
  • Как передать одномерный массив из одной функции в другую?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Если это, таки, С++, то используйте std::vector. Одна функция его создает и возвращает, другая печатает.
    Чтобы не было лишнего копирования передавайте как константную ссылку:
    std::vector<int> MakeArray();
    void Print(const std::vector<int> array);


    Если надо работать с сишными массивами, то тогда придется длину возвращать отдельно через выходной параметр. Передавайте как указатель + длина.
    int* MakeArray(int *len);
    void Print(int *array, int len);
    Ответ написан
  • Работа с файлом через функцию с++?

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

    Тогда ваш код становится в Skip(N-1), Read(M-N+1), Read(K-M+1) и читает файл ровно один раз.
    Ответ написан
    1 комментарий
  • Как исправить ошибку конструктора класса c++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Приведите всё сообщение компилятора целиком. В нем однозначно написано, какой конструктор он ищет. Кажется, внимательно посмотрев на него вы заметите, что компилятору нужен конструктор с const String&, когда как у вас определен только String&.
    Ответ написан
    Комментировать
  • Как копировать поведение типа, переданного аргументом шаблона класса?

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Нет, надо просто прочитать n символов и поддерживать текущий символ, индекс начала группы и длину группы.
    Когда прочитали символ, если он не равен предыдущему, то выводите группу. Если равен, то увеличивайте длину группы. После цикла не забудьте вывести последнюю группу. Еще, для удобство изначально надо инициализировать ваши переменный группой длины 1 с первого символа и начать итерироваться со второго.
    Ответ написан
  • Какая ошибка в коде?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Скобки в if расставьте, где сокет создаете. Приоритет у сравнения больше, чем у присваивания
    Ответ написан
    Комментировать
  • Как настроить IDE C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Так нельзя создавать динамический массив в C++. Это VLA, и оно не является стандартом. VS вообще, похоже, его не поддерживает, в отличии от gcc, который этот код компилирует, хоть и не обязан. Видимо, на серверах стоит g++.

    Никакие настройки вам не помогут.
    Вам надо выделять динамический массив через new[] или лучше использовать std::vector.
    Ответ написан
    1 комментарий
  • Что за ошибки и как их решить?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы ваш исходник на C++ пытаетесь запуcтить. как будто это java.

    Настройте eclipse для работы с c++. CDT вроде плагин назывался, который надо поставить.
    Ответ написан
  • Как решить ошибку индексирования динамического двумерного массива?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы работаете с matrix, как если бы это был массив, но у вас это не массив. Или переопределите оператор [] или как-то выдавайте из matrix наружу T**.
    Ответ написан
    Комментировать
  • Как уменьшить выходной exe при компиляции?

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

    Мелкий файл вы получите, если напишите на чистом winapi и скомпилируете msvc. Ну, или с динамической линковкой всех библиотек, но ваш exe без установленных в системе VС++ redistributables работать не будет.
    Ответ написан
    Комментировать
  • Как исправить ошибку в операторе =?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Надо выделять памяти на +1 символ для завершающего '\0' (который вы тоже должны в конце ставить).

    Потом, можно использовать strcpy вместо ручного цикла. И потом, ваш класс сильно проигрывает std::string - подумайте над вариантом использовать его. Ну или используйте его внутри вашего класса вместо ручного выделения памяти.
    Ответ написан
    Комментировать
  • Как убрать мусор из char массива?

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

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

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

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

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

    Если вы про имя параметра, то обычно члены класса делают приватными и это как-то отражается в имени. Например, в конце имени ставится _. А у аргумена функции - нет. Вот они и будут различными. Если же вам нужен именно публичный член класса, то не проблема, что они совпадают, ибо из метода можно обратиться к члену через this и параметру просто так. Но это опасно - можно где-то перепутать и лучше все-таки чтобы имена параметров методов и членов класса не совпадали.
    Ответ написан
    7 комментариев
  • Mоего преподавателя не устраивают следующие операторы:Rev(&n,&A,&D) и Mult(&n,%D,&B1,&X1)?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Я думаю проблема в том, что вы передаете все как указатели. Например, n можно передавать не как адрес (&n), а просто как n (и тип параметра должен быть не int*, а просто int).

    Это все лишнее и только усложняет код.
    Ответ написан
    Комментировать
  • Почему не работает часть программы?

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

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

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    vector::erase. Итератор на i-ую позицию можно получить, прибавив i к begin().
    Ответ написан
    Комментировать
  • Как завершить ввод строки без нажатия enter?

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