[ 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:
    638
    Reputations:
    476
    Это продолжение аналогичной переполненной темы:
    https://forum.antichat.ru/threads/40894/
     
    _________________________
    Suicide likes this.
  2. 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]; - вот эта строка к чему она здесь?
     
  3. #colorblind

    #colorblind Moderator

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

    vitaliy_n73 Member

    Joined:
    2 Jul 2009
    Messages:
    98
    Likes Received:
    21
    Reputations:
    0
    Понял спасибо))значит я на правильном пути,смотрю этот массив нигде не задействован,вот и засомневался.Просто смутило то что это книга самоучитель,думал там все примеры идеальны)
     
  5. 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.
     
  6. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    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.
  7. Orakul

    Orakul New Member

    Joined:
    24 Jun 2013
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Благодарю !!! Помогло!!!
     
  8. 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);
    Так компилируется без ошибок компилятора.
     
  9. blackbox

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

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

    #colorblind Moderator

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

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

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

    maksubayter New Member

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

    ZodiaX Reservists Of Antichat

    Joined:
    7 May 2009
    Messages:
    533
    Likes Received:
    308
    Reputations:
    51
  14. Ins3t

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

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

    aladin1 Member

    Joined:
    16 Sep 2009
    Messages:
    330
    Likes Received:
    29
    Reputations:
    7
    Доброго дня, имеется переменная строка word = "%lol%goodword" в которой часть "%lol%" всегда присутствует, а "goodword" меняется и может быть чем угодно, каким образом можно отрезать часть "%lol%" от неё, а нужную часть "goodword" поместить обратно в переменную word, либо в другую
     
  16. 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.
  17. 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"
        }
     
  18. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    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.
  19. aladin1

    aladin1 Member

    Joined:
    16 Sep 2009
    Messages:
    330
    Likes Received:
    29
    Reputations:
    7
    ровно так и делал, хз почему не получалось, надо было сразу код запостить, не успел сообразить, ща попробовал тоже самое + VS 2008 попросил еще добавить "stdafx.h" и всё норм стало...
     
  20. 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, как можно их объединить?