[ C / C++ ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by begin_end, 28 Apr 2015.

  1. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    641
    Reputations:
    476
    Это продолжение аналогичной переполненной темы:
    https://forum.antichat.ru/threads/40894/
     
    _________________________
    Suicide likes this.
    1. vitaliy_n73

      vitaliy_n73 Member

      Joined:
      2 Jul 2009
      Messages:
      98
      Likes Received:
      21
      Reputations:
      0
      Доброго времени суток!Начал изучать С++ ,сейчас учу тему массивы,и вот вроде бы все понятно,но в одном из кодов в книжке нет описания одной строчки,а вот зачем она тут сам ну никак понять не могу!подмогите пожалуйста))
      Code:
      #include <iostream>
      using namespace std;
      
      char name[10][80]; // Массив имен служащих.
      char phone[10] [20]; // Массив телефонных номеров служащих.
      float hours[10]; // Массив часов, отработанных за неделю.
      float wage[10]; // Массив окладов.
      
      int menu();
      void enter(), report();
      int main()
      {
      int choice;
      do {
      choice = menu(); // Получаем команду, выбранную пользователем.
      switch(choice) {
      case 0: break;
      case 1: enter();
      break;
      case 2: report();
      break;
      default: cout << "Попробуйте еще раз.\n\n";
      }
      }while(choice != 0);
      
      return 0;
      }
      
      // Функция возвращает команду, выбранную пользователем.
      int menu()
      {
      int choice;
      cout << "0. Выход из программы\n";
      cout << "1. Ввод информации\n";
      cout << "2. Генерирование отчета\n";
      cout << "\n Выберите команду: ";
      cin >> choice;
      
      return choice;
      }
      
      // Функция ввода информации в базу данных.
      void enter()
      {
      int i;
      char temp[80];
      for(i=0; i<10; i++) {
      cout << "Введите фамилию: ";
      cin >> name[i];
      cout << "Введите номер телефона: ";
      cin >> phone[i];
      cout << "Введите количество отработанных часов: ";
      cin >> hours[i];
      cout << "Введите оклад: ";
      cin >> wage[i];
      }
      }
      
      // Отображение отчета.
      void report()
      {
      int i;
      for(i=0; i<10; i++) {
      cout << name[i] << ' ' << phone[i] << '\n';
      cout << "Заработная плата за неделю: "<< wage[i] * hours[i];
      cout << '\n';
      }
      }

      _________________
      char temp[80]; - вот эта строка к чему она здесь?
       
      1. #colorblind

        #colorblind Moderator

        Joined:
        31 Jan 2014
        Messages:
        637
        Likes Received:
        246
        Reputations:
        42
        Вообще, это объявление одномерного массива из char, в количестве 80 штук. В данном кодесе оно не нужно, т.к. нигде не применяется. Видимо авторы забыли убрать строчку, когда переделывали свой кодес. Так что просто забей и удали.
         
        Orakul likes this.
        1. vitaliy_n73

          vitaliy_n73 Member

          Joined:
          2 Jul 2009
          Messages:
          98
          Likes Received:
          21
          Reputations:
          0
          Понял спасибо))значит я на правильном пути,смотрю этот массив нигде не задействован,вот и засомневался.Просто смутило то что это книга самоучитель,думал там все примеры идеальны)
           
          1. Orakul

            Orakul New Member

            Joined:
            24 Jun 2013
            Messages:
            14
            Likes Received:
            0
            Reputations:
            0
            Здравствуйте. Знатоки помогите с функцией SHGetFileInfoW

            Ребят задача требует получить информацию об объекте файловой системы : файле, папке, диске. Для этого использую функцию SHGetFileInfoW - в хидере описание данной функции выглядит так :
            Code:
            SHSTDAPI_(DWORD_PTR) SHGetFileInfoA(LPCSTR pszPath,
                                    DWORD dwFileAttributes,
                                    __inout_bcount_opt(cbFileInfo) SHFILEINFOA *psfi,
                                    UINT cbFileInfo, UINT uFlags);
            
            SHSTDAPI_(DWORD_PTR) SHGetFileInfoW(LPCWSTR pszPath,
                                 DWORD dwFileAttributes,
                                 __inout_bcount_opt(cbFileInfo) SHFILEINFOW *psfi,
                                    UINT cbFileInfo, UINT uFlags);
            Мой код , который выдает ошибку:
            Code:
            void __fastcall Twindowsnetrepository::FormCreate(TObject *Sender)
            {
                UINT SysImageList;
                TSHFileInfo SFI;
            //    char patch = '';
                ListView1->LargeImages = new TImageList(this);
                ListView1->SmallImages = new TImageList(this);
                //Запрашиваем большие иконки
            //    SysImageList = SHGetFileInfo('', 0,  &SFI, sizeof(SFI), SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
                if (SysImageList != 0 )
                    {
            //Присваиваем системные иконки в ListViewl
                        ListView1->LargeImages->Handle = SysImageList;
                        ListView1->LargeImages->ShareImages = TRUE;
                    }
            //Запрашиваем маленькие иконки
                SysImageList = SHGetFileInfoW(' ', 0, &SFI, sizeof(SFI),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
                if (SysImageList != 0)
                    {
                        //Присваиваем маленькие системные иконки в ListViewlОбзор дополнительных компонентов Delphi  323
                        ListView1->SmallImages->Handle = SysImageList;
                        ListView1->SmallImages->ShareImages =  TRUE;
                    }
            }
            Компилятор ругается на первый параметр функции SHGetFileInfoW: LPCWSTR pszPath -" Character constant too long (or empty)".
            Как видно из сообщения компилятору не нравится "Длинная или пустая константа" - pszPath. Пробовал передавать явно через константу pszPath ,путь к файлу все равно ругается. Подскажите если сталкивались в чем тут загвоздка. Просмотрел исходники трех Filemanager без результатно , ответа на свой вопрос не нашел.Работаю в Builder.
             
            1. #colorblind

              #colorblind Moderator

              Joined:
              31 Jan 2014
              Messages:
              637
              Likes Received:
              246
              Reputations:
              42
              Code:
              ListView1->SmallImages->Handle =
                SHGetFileInfo("", 0, &SFI, sizeof(SFI),
                SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
              ListView1->LargeImages->Handle =
                SHGetFileInfo("", 0, &SFI, sizeof(SFI),
                SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
               
              Orakul likes this.
              1. Orakul

                Orakul New Member

                Joined:
                24 Jun 2013
                Messages:
                14
                Likes Received:
                0
                Reputations:
                0
                Благодарю !!! Помогло!!!
                 
                1. Orakul

                  Orakul New Member

                  Joined:
                  24 Jun 2013
                  Messages:
                  14
                  Likes Received:
                  0
                  Reputations:
                  0
                  Только еще в первом параметре надо добавлять- L . Пример:
                  Code:
                  ListView1->LargeImages->Handle = SHGetFileInfo(L"", 0, &SFI, sizeof(SFI),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
                  Так компилируется без ошибок компилятора.
                   
                  1. blackbox

                    blackbox Elder - Старейшина

                    Joined:
                    31 Dec 2011
                    Messages:
                    362
                    Likes Received:
                    62
                    Reputations:
                    11
                    Нужна доступная литература по созданию визуальных приложений на С++ в Visual Studio. Чтобы для полного нубаса было понятно.
                     
                    1. #colorblind

                      #colorblind Moderator

                      Joined:
                      31 Jan 2014
                      Messages:
                      637
                      Likes Received:
                      246
                      Reputations:
                      42
                      C++ for dummies
                       
                      1. blackbox

                        blackbox Elder - Старейшина

                        Joined:
                        31 Dec 2011
                        Messages:
                        362
                        Likes Received:
                        62
                        Reputations:
                        11
                        И где там про создание приложений в MSVC?
                         
                        1. maksubayter

                          maksubayter New Member

                          Joined:
                          2 May 2011
                          Messages:
                          4
                          Likes Received:
                          0
                          Reputations:
                          0
                          Всем привет! Начал изучать С++. Вот интересно стало как можно реализовать брут вебморды какого либо сетевого устройства.
                          Знающий народ, подскажите в каком направлении копать(какие библиотеки, по каким запросом корректнее нужно гуглить) и если есть что то рабочее, то хотелось бы для примера посмотреть исходники.
                          Спасибо
                           
                          1. ZodiaX

                            ZodiaX Reservists Of Antichat

                            Joined:
                            7 May 2009
                            Messages:
                            533
                            Likes Received:
                            308
                            Reputations:
                            51
                            libcURL'a должно хватить.
                            Пример работы с формой http://curl.haxx.se/libcurl/c/http-post.html
                             
                            1. Ins3t

                              Ins3t Харьковчанин

                              Joined:
                              18 Jul 2009
                              Messages:
                              939
                              Likes Received:
                              429
                              Reputations:
                              139
                              boost::asio
                               
                              1. aladin1

                                aladin1 Member

                                Joined:
                                16 Sep 2009
                                Messages:
                                330
                                Likes Received:
                                29
                                Reputations:
                                7
                                Доброго дня, имеется переменная строка word = "%lol%goodword" в которой часть "%lol%" всегда присутствует, а "goodword" меняется и может быть чем угодно, каким образом можно отрезать часть "%lol%" от неё, а нужную часть "goodword" поместить обратно в переменную word, либо в другую
                                 
                                1. Ins3t

                                  Ins3t Харьковчанин

                                  Joined:
                                  18 Jul 2009
                                  Messages:
                                  939
                                  Likes Received:
                                  429
                                  Reputations:
                                  139
                                  Code:
                                  std::string str = "%lol%goodword";
                                  str = str.substr(5, str.length());
                                  
                                   
                                  aladin1 likes this.
                                  1. aladin1

                                    aladin1 Member

                                    Joined:
                                    16 Sep 2009
                                    Messages:
                                    330
                                    Likes Received:
                                    29
                                    Reputations:
                                    7
                                    не совсем понял синтаксис мб, не вышло даже вывести на экран str из примера, задача такая:
                                    Code:
                                    username = "user";
                                    fstream P;
                                    P.open("pass.txt");
                                    while (!P.eof())
                                    {
                                        P >> password;// например поток хавает строку password = "%username%123;
                                        if (strchr(password, '%') != NULL){
                                            //тут надо отсечь от password часть "%username%"
                                            wsprintfA(password, "%s%s", username, password);// чтобы тут получить password = "user123"
                                        }
                                     
                                    1. #colorblind

                                      #colorblind Moderator

                                      Joined:
                                      31 Jan 2014
                                      Messages:
                                      637
                                      Likes Received:
                                      246
                                      Reputations:
                                      42
                                      омг)
                                      Code:
                                      #include <iostream>
                                      #include <string>
                                      
                                      int main ()
                                      {
                                      std::string str = "%lol%goodword";
                                      str = str.substr(5, str.length());
                                      
                                      std::cout << str << '\n';
                                        return 0;
                                      }
                                      
                                      Еще можно так:
                                      Code:
                                      #include <iostream>
                                      #include <string>
                                      
                                      using namespace std;
                                      
                                      int main ()
                                      {
                                      string password = "%lol%goodword";
                                      password.erase(0,5);
                                      cout << password << '\n';
                                        return 0;
                                      }
                                      
                                       
                                      #18 #colorblind, 22 May 2015
                                      Last edited: 22 May 2015
                                      aladin1 likes this.
                                      1. aladin1

                                        aladin1 Member

                                        Joined:
                                        16 Sep 2009
                                        Messages:
                                        330
                                        Likes Received:
                                        29
                                        Reputations:
                                        7
                                        ровно так и делал, хз почему не получалось, надо было сразу код запостить, не успел сообразить, ща попробовал тоже самое + VS 2008 попросил еще добавить "stdafx.h" и всё норм стало...
                                         
                                        1. aladin1

                                          aladin1 Member

                                          Joined:
                                          16 Sep 2009
                                          Messages:
                                          330
                                          Likes Received:
                                          29
                                          Reputations:
                                          7
                                          Кажется, понял в чем проблема, но не понял как решить:
                                          Code:
                                          char username[24];
                                          char password[24];
                                          
                                          fstream U;
                                          U.open("user.txt");
                                          U >> username;// например поток хавает строку username = "user;
                                          fstream P;
                                          P.open("pass.txt");
                                          while (!P.eof())
                                          {
                                              P >> password;// например поток хавает строку password = "%username%123;
                                              if (strchr(password, '%') != NULL){
                                                  string password1 = password;
                                                  password1 = password1.substr(10, password1.length());
                                                  wsprintfA(password, "%s%s", username, password1);
                                              }
                                          
                                          При попытке вывода cout << "Get newpassword: " << password << "\n"; Вылетает
                                          При попытке записи password в файл, пишет только username, без password1
                                          Подозреваю, проблема в последней строчке wsprintfA не может объединить в password две строки, мб потому что password1 получен через класс string, как можно их объединить?