• Почему неправильно считывается строка?

    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
    Погроммирую программы
    Количество строк кода не влияет на производительность. Пиши понятно, а не "решил написать тут, чтобы на одну строчку меньше было".
    Ответ написан
    1 комментарий
  • Как Вы обходитесь без "if"?

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

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

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

    vabka
    @vabka
    Токсичный шарпист
    Зачем передавать переменные-параметры в функцию, если можно писать глобальное объявление переменных?

    1. Чтобы избавлять от дублирования (ну вообще это сам смысл функций)
    2. Чтобы удобнее работать с этими функциями (сразу видишь, что функция от тебя ждёт)
    3. Чтобы нормально работало в многопоточной среде. (глобальные переменные и многопоток не совестимы)

    Ну вот например менее абcтрактный пример:
    int sum(int a, int b) { // всё отлично, всё понятно
      return a + b;
    }
    
    int a,b;
    // Каким образом мы поймём, что надо перед вызовом sum задать какое-то значение переменным a и b?
    // sum и её "параметры" a и b никак не связаны
    int sum() {
      return a + b;
    }
    
    int sum() { // а как в этом случае нам сложить две переменные? Как задать значения a и b??????
      int a,b;
      return a + b;
    }
    Ответ написан
    Комментировать
  • Как внедрить в ядро ОС на Си C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    C++ это язык программирования. Его поддержки ни в каком ядре нет.

    Ядро - это часть операционной системы, которая предоставляет основной интерфейс для работы процессов и системные функции которыми можно пользоваться. Писать ядро можно на чем угодно, и никакой связи с поддерживаемыми языками нет.

    А С++ поддерживается в первую очередь компилятором, который к ядру никакого отношения не имеет.

    Немного другой вопрос линкер, который создает бинарник или библиотеку, и ваше ядро по идее должно уметь этот бинарник запускать а библиотекой пользоваться.

    Итого, прежде чем "подключать С++ к ядру", следует уточнить как работает архитектура ОС и задать правильный вопрос
    Ответ написан
    7 комментариев
  • Где найти хедер OpenGL/gl3.h?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    sudo apt-get install build-essential libgl1-mesa-dev
    Попробуйте подключить так:
    #include <GL/gl.h>
    Ответ написан
    Комментировать
  • Предупреждение при использовании последнего элемента массива?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    почему при указывании 3 элемента, он начинает считать с 1
    Кто вам такое сказал? Элементы массива в C++ всегда нумеруются начиная с нуля.
    Предупреждение для того и даётся, чтобы вы исправили код. Иначе во время работы программы могут быть самые неожиданные эффекты, начиная от некорректных вычислений и заканчивая вылетом программы из-за исключения при попытке доступа к чужой памяти.
    Ответ написан
    Комментировать
  • Есть ли нативный способ написать GUI на html/css для С++ программ?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Хватит ерундой заниматься и используйте нормальные инструменты для GUI конкретного языка.

    Qt -тяжелая для одного виджета? А браузер для одного виджета не тяжелый?

    Пиши на шарпе или делфи тогда. Там с GUI куда лучше и легче.

    P.S. qt позволяет использовать css для настройки контролов.
    Ответ написан
  • Как найти НОД двух чисел?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Почитайте про алгоритм Евклида
    Ответ написан
    Комментировать
  • Как устроен движок скриптинга?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Практический каждый движок состоит из нескольких основных компонентов:
    • основной код игры с логикой
    • механизм рендеринга
    • звуковой движок
    • физический движок
    • ИИ

    Понятное дело, что от реализации к реализации этот список может меняться. Обычно поверх всего это дела накатывается какая-то абстракция, чтобы это все можно было нормально использовать не залезая в исходники, так появились Unity/Unreal/Cry Engine и т.д. В итоге мы получаем набор инструментов и библиотек для обработки низкоуровневых функций, например таких как рисование объектов, и поэтому вместо написания кода для рисования разработчик просто создает объект класса спрайт. Как у разработчика у вас, обычно, есть полотно(сцена), где вы расставляете объекты и потом привязываете к объектам скрипты, при сборке это все является аргументами какой-то функции или конструкторами какого-то класса, который и начинает выполнять и связывать всю эту логику. Если мы говорим за популярные движки, указанные выше, то в них есть Entity Manager, который отслеживает все сущности и их поведение на сцене, а вашу сцену уже можно представить как граф, где узлы - сущности, а действия между ними - ребра.
    Важно понимать, что реализация и внутренние механизмы меняются от случая к случаю. Вот здесь и здесь и здесь можно прочитать про движки в целом, а здесь и здесь посмотреть, как умные дяди на ваших глазах пишут эти самые движки.
    Ответ написан
    Комментировать
  • Сито, как правильно отсортировать?

    @Homemade
    Просто выведи диаметры сит в порядке убывания.
    Ответ написан
    1 комментарий