На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Распространённые функции библиотеки , не имеющие аналогов в Стандарте
    Ну вот printf часто удобнее cout'а. Да и _getch'а вроде как нет в C++.

    Добавлено
    Как пример...

    Эта тема была разделена из темы "long double 80 бит (Windows)"
      За printf() vs std::cout – это в Холивары. Я лично с этим в корне не согласен. Что до _getch(), то в Стандарте такой функции нет, даже в C. Это расширение языка, хоть и распространённое, но только потому, что сама платформа, для которой эта функция нужна, распространена.

      Добавлено
      P.S. Аналогов нет – пользуй на здоровье.
        Цитата Qraizer @
        Я лично с этим в корне не согласен.
        С чем "с этим"?

        Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
          Вот с этим:
          Цитата Jin X @
          Ну вот printf часто удобнее cout'а.


          Добавлено
          Единственная ситуация, когда он удобнее, это когда он есть, а std::cout-а нет. Т.е. в C.

          Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
            Qraizer, ты считаешь средства форматирования в потоках i/o удобнее printf/sprintf?

            Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
              Цитата Jin X @
              Да и _getch'а вроде как нет в C++.

              ExpandedWrap disabled
                std::cin.get();

              :huh: ?

              Добавлено
              Цитата JoeUser @
              Qraizer, ты считаешь средства форматирования в потоках i/o удобнее printf/sprintf?

              С ними работать удобнее и безопаснее в С++(с потоками в смысле).
              Допустим та же sprintf не безопасна.

              Добавлено
              Ну и Сишные функции заточены исключительно на голые указатели, что как бы намекает - на то, что ты направил ствол в ногу, и пальцем дергаешь курок. Выстрелит - не выстрелит :-?

              Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
              Сообщение отредактировано: Wound -
                Цитата Wound @
                :huh: ?

                _getch() подавляет эхо, std::cin.get() - нет.

                Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                  Цитата JoeUser @
                  _getch() подавляет эхо, std::cin.get() - нет.

                  Отключи его системными функциями, если тебе нужно именно так:
                  ExpandedWrap disabled
                        HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
                        DWORD mode = 0;
                        GetConsoleMode(hStdin, &mode);
                        SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));


                  Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                    Цитата Wound @
                    С ними работать удобнее

                    На счет безопасности не говорим. Тут вопросов нет. А вот на счет удобства форматирования я бы поспорил.
                    К примеру, изобрази это манипуляторами потоков i/o:
                    ExpandedWrap disabled
                      char i = 12;
                      printf("%04d :: %0*x",i,4,i);


                    Добавлено
                    Цитата Wound @
                    Отключи его системными функциями, если тебе нужно именно так:

                    А смысл городить эту "лапшу", если просто можно использовать _getch()?

                    Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                      Цитата JoeUser @
                      К примеру, изобрази это манипуляторами потоков i/o:

                      Загляни в iomanip, выбери интересующий тебя манипулятор - напиши его.

                      Вот тебе обратная задача, изобрази своими sprintf'ми:
                      ExpandedWrap disabled
                        MyObject object;
                        std::string message = "message";
                        std::ostringstream stream;
                        stream << "Message: " << message << << " Size: " << message.size() << object << std::endl;


                      Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                        Оффтопите. Да и Холивары у нас в отдельном разделе.


                        Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                        Сообщение отредактировано: JoeUser -
                          Цитата Wound @
                          Загляни в iomanip, выбери интересующий тебя манипулятор - напиши его.

                          Зачем мне? У меня printf есть :lol: Я просто хотел показать несостоятельность твоего утверждения насчет мнимого "удобства" использования потоков в плане форматирования. А раз пошла песня "возьми и напиши ..." - значит я прав. Мне удобнее использовать готовое, чем изобретать велик :lol:

                          Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                            Цитата Wound @
                            Вот тебе обратная задача, изобрази своими sprintf'ми:

                            Еврейский у тя подход :lol: Не ответив на мой вопрос, задаешь свой :lol:

                            Ну примерно так будет:
                            ExpandedWrap disabled
                              #include <iostream>
                              #include <sstream>
                              #include <cstdio>
                               
                              class MyObject {
                                public:
                                  char* str() {
                                    return const_cast<char*>(Data);      
                                  };
                                private:
                                  const char* Data = "MyObject";
                              };
                               
                              int main() {
                                MyObject object;
                                std::string message = "message";
                                std::ostringstream stream;
                                //stream << "Message: " << message << " Size: " << message.size() << object << std::endl;
                                printf("Message: %s Size: %d%s\n",message.c_str(),message.size(),object.str());
                                return 0;
                              }


                            Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                              Цитата Wound @
                              Отключи его системными функциями, если тебе нужно именно так
                              Ага. Т.е. ради принципа использовать функции C++ я должен нагромождать код всякой ерундой?
                              К тому же, я не о getchar говорю, а о _getch. Мне нужен не ввод строки до Enter'а, а 1 клавиша. Не надо путать.

                              Добавлено
                              Короче... каждый инструмент имеет свои + и -, так что всё нужно применять с умом и к месту.
                              Вот и всё. Хотя эти + и - знать не мешает. Просто не надо говорить, что "а" однозначно лучше, чем "б".

                              Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                                Цитата Jin X @
                                Т.е. ради принципа использовать функции C++ я должен нагромождать код всякой ерундой?

                                Вообщето getch, _getch это не стандартная функция С++, это расширение от Майкрософт. На других системах твой код работать не будет.

                                Добавлено
                                Цитата Jin X @
                                Короче... каждый инструмент имеет свои + и -, так что всё нужно применять с умом и к месту.
                                Вот и всё. Хотя эти + и - знать не мешает. Просто не надо говорить, что "а" однозначно лучше, чем "б".

                                Да, применять Сишные функции в языке С++, когда в нем есть аналоги - это не с умом и не к месту. И я сейчас говорю не о функции getch(так как она не имеет отношения не к С, не к С++).
                                Потому как проще тогда уже взять чистый Си и писать на нем, если на нем проще и удобней реализовать какую то задачу, чем на С++.

                                Добавлено
                                Цитата Wound @
                                На других системах твой код работать не будет.

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

                                Добавлено
                                Ну и если заглянуть в MSDN, то можно внезапно обнаружить такую ремарку(https://msdn.microsoft.com/ru-ru/library/078sfkak.aspx):
                                ExpandedWrap disabled
                                  This API cannot be used in applications that execute in the Windows Runtime. For more information, see CRT functions not supported with /ZW.

                                То есть оно даже к твоему удивлению может перестать работать, после изменения настроек компилятора.

                                Это сообщение было перенесено сюда или объединено из темы "long double 80 бит (Windows)"
                                Сообщение отредактировано: Wound -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0482 ]   [ 17 queries used ]   [ Generated: 29.03.24, 02:08 GMT ]