[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    проблема в том что мне что сортировать нужно не только имени но и размеру
    (обращаться нужно только к именам после сортировки)
    поэтому думаю как лучше реализовать..сейчас как раз с std и думаю
    у меня vc6 че-то ошибки выдает когда использую list
    скачал sdk пишет про секьюрити куки =\\\\\\\\\\\\\\\\\\\
    думаю может на vc 2008 ?писать


    я так понял для сорт можно свою функцию задавать..

    typedef vector<pair<__int64,string> > viListImage;
    typedef pair<__int64,string> piListimage;// размер и имя


    bool ptr_less(const piListimage& lhs, const piListimage& rhs)
    {
    return lhs.first < rhs.first;
    }

    sort(viLstImg->begin(),viLstImg->end(),&ptr_less);
     
    #441 inv, 17 Nov 2007
    Last edited: 17 Nov 2007
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > я так понял для сорт можно свою функцию задавать..

    нет

    > думаю может на vc 2008 ?писать

    тогда уж vc7 (2003)

    > сейчас как раз с std и думаю
    у меня vc6 че-то ошибки выдает когда использую list

    по идее, это считается небезопасным (как, например, gets())
    что конкретно - хз

    > проблема в том что мне что сортировать нужно не только имени но и размеру

    сначала - по имени, потом по размеру, или наоборот.
     
  3. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    сначала по размеру

    я выше привел пример как сделал,ща проверяю как он работает)

    Code:
    d:\test\p1
    path:d:\test\p1\abcde5.jpg size:8678
    path:d:\test\p1\abcde3.jpg size:11788
    path:d:\test\p1\abcde2.jpg size:21068
    path:d:\test\p1\abcde4.jpg size:22089
    path:d:\test\p1\abcde.jpg size:23078
    d:\test\p1\p1_1
    path:d:\test\p1\p1_1\abcde.jpg size:23078
    d:\test\p1\p1_1\p1_1_1
    path:d:\test\p1\p1_1\p1_1_1\abcde.jpg size:23078
    d:\test\p1\p1_1\p_1_1_2
    path:d:\test\p1\p1_1\p_1_1_2\abcde.jpg size:23078
    d:\test\p2
    path:d:\test\p2\abcde.jpg size:23078
    Press any key to continue
    
    вроде пашет

    (мне нужно сначала найти все подпапки потом сортировать там файлы)
     
    #443 inv, 17 Nov 2007
    Last edited: 17 Nov 2007
  4. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    вообщем сделал так
    Code:
    typedef vector<pair<__int64,string> > viListImage;
    typedef pair<__int64,string> piListimage;// размер и имя
    ....
    bool ptr_less_size(const piListimage& lhs, const piListimage& rhs)
    {
    	return lhs.first < rhs.first;
    }
    bool ptr_less_name(const piListimage& lhs, const piListimage& rhs)
    {
    	return rhs.second.compare(lhs.second)+1; //compare возращает -1 0 1
    }
    
    ....
    sort(viLstImg->begin(),viLstImg->end(),&ptr_less_size);
    ....
    		sort(viLstImg->begin(),viLstImg->end(),&ptr_less_name);
    
    сортиврока по размеру и имени вроде работает..
     
  5. Dunadan007

    Dunadan007 New Member

    Joined:
    21 Nov 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Здравствуйте, я первый раз на этом замечательном сайте и меня интересует следующий вопрос:
    Если сервер посылает/принимает данные через startinf.hStdInput=startinf.hStdOutput = startinf.hStdError = socket;
    То как принимать данные клиентом?
    Я пытался через баальшуйщий буффер:
    char l_buf [4096];
    ...
    recv(socket, l_buf, 4096);
    ...
    Но передовалась только одна строка.
    Тогда я пытался сделать так:
    ...
    char buff_in [128]
    ...
    while (true)
    {recv(socket, buff_in,128);
    if (buff_in == etalon_void_buffer) break;//etalon buffer -- eto //ZeroMemory(etalon_void_buffer,128);
    printf (buff_in);
    ZeroMemory(buff_in,128);
    }
    scanf(%s,buff_out);
    send(socket, buff_out, 128);
    ...
    Но так почему-то не выполняется сканф и посылка.
    В приведённом коде могут быть орфографические/синтаксические ошибки, не обращайте внимания, в настоящим их точно нет.
    Помогите пожалуйста рашить мою проблему.
     
    #445 Dunadan007, 21 Nov 2007
    Last edited: 22 Nov 2007
    1 person likes this.
  6. reversys

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

    Joined:
    21 Nov 2007
    Messages:
    139
    Likes Received:
    57
    Reputations:
    7
    Вот это у тебя получается безконечный цикл. Ты в ифе сравниваешь два адреса которые всегда не равны, и поэтому break никада не выполнится...

    Чтобы избежать этой проблемы можно либо передавать какуюто завершающую последовательность символов (чтобы получающая сторона знала что это последние передаваемые данные) либо передавать вначале размер данных а потом сами данные чтобы получающая сторона знала сколько их принять

    Кстати я тоже тут впервые :)
     
    1 person likes this.
  7. Dunadan007

    Dunadan007 New Member

    Joined:
    21 Nov 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    А можно поподробней и поконкретней?
    Желательно с примерами/рисунками.
     
  8. reversys

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

    Joined:
    21 Nov 2007
    Messages:
    139
    Likes Received:
    57
    Reputations:
    7
    Ну вот смотри... Допустим тебе нужно переслать строку: Hello World.
    Ты считаешь сколько символов в строке. Умножаешь это количество на то сколько места занимает 1 символ. (char занимает 1 байт).
    И результат пересылаешь через сокет принимающей стороне.
    А после этого шлёшь уже и саму строку.
    Принимающая сторона теперь знает - "щас мне придёт 12 байт информации" и начинает принимать данные до тех пор пока не примет все 12 байт :)

    Например если ты будешь запрашивать какуюнить вебстраничку тебе в ответ придёт чтонибудь такое

    HTTP/1.x 200 OK

    Cache-Control: private

    Content-Type: text/html; charset=UTF-8

    Content-Encoding: gzip

    Server: gws

    Content-Length: 2200

    Date: Thu, 22 Nov 2007 18:07:06 GMT

    и после этого сама страничка. Где поле Content-Length: 2200 покажет сколько эта страничка занимает места, т.е. какое количество информации программа которая её принимает должна принять.

    Хоть и без рисунков но помоему подробней уже некуда :)
     
  9. Dunadan007

    Dunadan007 New Member

    Joined:
    21 Nov 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Эт то я понял, для меня остаётся тайной то , как подсчитать кол-во символов в массиве чаров, не используя всякие Mfc , Vcl и другие.
    ПС: а форум не позволяет писать с капсом, круто.
     
  10. reversys

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

    Joined:
    21 Nov 2007
    Messages:
    139
    Likes Received:
    57
    Reputations:
    7
    например функция strlen
     
  11. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    зацикливание происходит.

    делай так:
    Code:
    char buff_in [128]
    int len;
    
    for(;;)
    {
        len=recv(socket, buff_in,127);
        if(len == -1) break;
        buff_in[len]='\0';
        printf("%s",buff_in );
    }
    
    но это сработает ток есле сервер закроет соединение после отправки данных. в противном случае ты должен знать длинну данных которые тебе нужно получить
     
    #451 nc.STRIEM, 23 Nov 2007
    Last edited: 23 Nov 2007
  12. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Как вывести определенное значение из реестра? Т.е. есть ветка
    и ключ Build
    Нужно вывести значение этого ключа.
    Я использовал RegQueryValueExA, но он не хочет работать :(

    Code:
    HKEY hKey;
    DWORD Err;
    DWORD type = REG_SZ;
    char v[80] = " ";
    unsigned long buf;
    char err;
    //.............//
    if((RegQueryValueExA(hKey, "Build", NULL, &type, (unsigned char *)v, &buf))==ERROR_SUCCESS)
    {
     MessageBoxA(0,v,"Good!",0);
    }
    else
    {
      MessageBoxA(0, "error", "error", MB_OK);
    }
    P.S. RegOpenKeyExA работает нормуль...
     
  13. Ky3bMu4

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

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Вроде всё должно норм работать... Вместо &type поставь 0.


    P.S.
    MessageBox`ы это не айс. Ставь breakpoint`ы и запускай по F8. ;)
     
    #453 Ky3bMu4, 27 Nov 2007
    Last edited: 27 Nov 2007
  14. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    вау !
    while(1) уже не актуально?
     
    #454 demonoid, 28 Nov 2007
    Last edited: 28 Nov 2007
    1 person likes this.
  15. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Не рабит... Два брейка поставил =)
    Даже если убрать месаджбоксы, то действие все рано переносится на else {/*...*/}
    Проверил: RegQueryValueExA выдает значение 6
     
  16. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    criz Бывает компилятор глючит, и не происходит обещенного, я очень часто такое замечаю на Builder C++

    // Попробуй переписать в более простой, а не компактный варимант!!!
     
  17. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    нет, не актуально и я даже могу объяснить почему.
    компилятор при транслировании цикла while(1) может поставить (скорее всего так и будет) проверку на равенство еденице условия цикла, то есть что 1==1, а это лишние инструкции. Получится код вида mov ecx, 1 / cmp ecx, 1 / jz XXX
    А for(;;) { .. } всегда транслируется в безусловный jmp

    Хотя это, вообщем-то, особенности компилятора, на других компиляторах (а я имел в виду MS VC++) мб и не так
     
    2 people like this.
  18. Meister

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

    Joined:
    13 Oct 2005
    Messages:
    185
    Likes Received:
    7
    Reputations:
    0
    Есть ли такая возможность в C++ Builder 6 ? :
    При размещении элемента на форме он растягивается\двигается с определенным шагом, иногда этого шага не достаточно для тонкой работы. Можно ли его уменьшить?
     
  19. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    вручную растяни до требуемого размера, а более точно через свойства введи конкретное число
     
    _________________________
    1 person likes this.
  20. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Да я уж и незнаю как его переписать...
    Может причина в отсутствии прав на редактирование реестра? Тогда почему RegOpenKeyExA сработал.... :confused:
     
Thread Status:
Not open for further replies.