• Почему getchar() читает все символы из stdin?

    @pantoriy
    Ну это так называемый канонический режим считывания с терминала. Ведь вы тут с него пытаетесь считать. Можно конечно перенастроить терминал и включить режим посимвольного считывания, но это может привести к краху терминала, если не сделать это аккуратно... Вообще не рекомендуется менять режимы терминала ибо с терминалом работают все проги в сессии... Вы просто завалите сессию. Это катастрофа... Аккуратно это как операцией delete. Не забудьте восстановить канонический режим когда это уже не надо! А так при первом запуске getchar() происходит считывание до конца строки, вместе с концом строки. Или пока весь буфер не будет заполнен. Размер буфера устанавливается в системе и он мб 4 кб 8 или 16 или сколько вы там установите. Менять эту величину не стоит. Особенно в сторону уменьшения. Др проги об этом не знают. Обычно строка намного короче. Вот тут дан совет, попробовать read. Говорю сразу, не прокатит! Будет тоже самое. Вообще это не имеет отношения к тому каким образом вы будете считывать. Потому что режим работы терминала не изменится!!! Что делаю я? Я когда считал нужное кол-во символов просто сбрасываю остаток. И это самое разумное. Я не нашёл спецфункции для этого. Надо просто считывать пока не считаешь конец строки. Есть др функция, getline. Она сразу выдаёт всю строку. Но ей надо подсунуть адрес указателя на строку предварительно установленный в NULL. Она выделит память под нужное кол-во и заполнит его вместе с концом строки. Вы получите сразу 2 геморроя: 1 в конце память под строку надо освободить или вы автоматом получите утечку памяти. Второе возня с символом конца строки. Ну и сами понимаете это неэффективно... особенно если это в цикле, а так и бывает. Я выяснил, самое лучшее это записать типа scanf(" %[^\n]%*c", str). str обычная стековая строка с фиксированым размером. Для страховки можно указать макс длину считывания. Но потом сбр буфер можно той же командой scanf("%*[^\n]%*c") правда не уверен, что она не зациклится(не проверял...). Кстати в винде такой проблемы нет. И если написать на др языке тоже. На фортране к примеру.
    Ответ написан
    Комментировать
  • Узлы древовидной структуры лучше представить экземплярами класса или структуры?

    @alex_fedorov
    В С++ разница между классом и структурой ровно одна: в структуре по умолчанию данные являются public, в то время как в классе private. Так что принципиальной разницы нет (с моей точки зрения)
    Ответ написан
    Комментировать
  • Можно ли на "C" написать приложения под андроид?

    GavriKos
    @GavriKos
    Гуглите в сторону Android NDK. Правда все равно вам нужно будет немного джавы.
    Вкратце схема такая. Делается либа на c/c++ (насколько я помню чистый c там тоже можно). Делается ядро приложения на java - всякие там activity, интерфейсец и прочее. Джава умеет вызывать методы вашей либы, и ваша либа обратно умеет вызывать методы джавы. Все это красиво архитектурно (на самом деле нет, ибо там геммора много) связываете и вуаля. Логика на сях, обертка на java.
    Ответ написан
    2 комментария
  • Как узнать время ответа сервера?

    @djay
    На ум приходит только разница времён до отправки запроса и после получения ответа.

    Есть еще один вариант - замерить время исполнения скрипта. По сути - отправил запрос сейчас, сервер пропарсил и ответил о том сколько времени он парсил (аля добавишь в ответный JSON ключ времени обработки).
    Ответ написан
    Комментировать
  • Как правильно применить функцию ко всем элементам двумерного вектора?

    myjcom
    @myjcom Куратор тега C++
    что то мудрено как то...
    for(auto &cellLine:matrix)
    {
        for(auto &cell:cellLine)
        {
            cell.showBody();
        }
    }

    foreach и лямбда-функции здесь явно лишние.
    про передачу по ссылке уже написал cppjunkie
    Ответ написан
    1 комментарий
  • Как правильно применить функцию ко всем элементам двумерного вектора?

    @cppjunkie
    Не меняются скорее всего из-за того что аргумент в лямбду передаётся по значению, поэтому весь вектор копируется и изменяется уже его копия. По-моему если поменять с

    vector<Cell> cellLine

    на

    vector<Cell> &cellLine

    то должно заработать. То же самое надо сделать и во внутреннем цикле относительно параметра Cell.
    Ответ написан
    1 комментарий
  • Как передавать в код с++ математическую функцию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Писать свой компилятор математических выражений или искать готовую библиотеку.
    Ответ написан
    Комментировать
  • Развеете мои стереотипы по ubuntu, linux mint?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Потому что их так позиционируют. Дистрибов много и надо хоть как-то выделяться, вот и начинается "очеловечивание" линуха, которое в итоге приводит к тому, что человек становится этаким "недо-линуксоидом", то есть человеком, который что-то способен сделать только через бубунтовский гуй, а когда он оказывается перед необходимостью работать с консолью, он чувствует себя ничуть не лучше, чем его собрат "недо-виндузятник", оказавшийся перед командной строкой.
    На самом деле это все стереотипы. И бубунтой и минтом можно пользоваться ровно так, как хочется - если знаешь, что делать и как делать. И сервера на них держат и все такое. Это в конце концов тот же линух :)

    О крутости шляпы.

    Шляпа - корпоративный дистриб. И его основная цель - чтобы работало. И этой цели он достигает. CentOS, его коммунити-зеркало, взлетает быстро, работает хорошо, обновления на el6 до сих пор выпускаются, несмотря на ведро 2.6.32 :) Но - повторюсь - это корпоративный дистриб. То есть там нет новых программ. Там нет ничего про игры и мультимедию и вообще про развлечения ничего нет. Это суровый набор рабочих инструментов :) Для дома он не годится.

    О "сверхкрутости" FreeBSD.

    Как человек, проработавший на FreeBSD c 1997 по 2013 год - могу сказать совершенно точно - это все лажа. Да, FreeBSD - это совсем не линух. Да, там другое ведро, там другой сетевой стек, там другой файрволл, там другое все. Но "другое" не значит "лучшее". Потеря коммунити - это самая серьезная потеря, а коммунити FreeBSD если не сокращается, то по крайней мере не растет.

    Почему?

    Проблемы с железом, то есть с дровами
    Проблемы с совместимостью, когда программы, работающие в линухе, скрипят и еле везут на FreeBSD
    Проблемы с разработчиками - ведь код ведра, дрова, специфические вещи нужно же кому-то писать!
    ...
    словом все то же самое, что убило когда-то одну из самых замечательных, красивых и весьма популярных ОС - OS/2...
    Ответ написан
    Комментировать
  • Файлы какого вида можно исполнять на Android?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Только скриптовое. Луа, например.
    Ответ написан
    Комментировать
  • Файлы какого вида можно исполнять на Android?

    @pfg21
    ex-турист
    вполне можно даже исполнить "линуксовый" бинарь, скомпилированный под арм-архитектуру. ибо под андроид-джава-оболочкой полноценный линукс.
    а скриптовый - любой, для которого поставишь/скомпилируешь соответствующую оболочку. тот же busybox предлагает практически полный комплект консольных приложений.
    в общем как и в любой операционной системе: какой инструмент поставишь - то и будет работать.
    Ответ написан
    2 комментария