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

Обсуждение в разделе «С/С++, C#, Delphi, .NET, Asm», начал(-а) _Great_, 26.05.2007.

Статус темы:
Тема закрыта для ответов.
  1. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.
     
    #1 _Great_, 26.05.2007
    В последний раз редактировалось: 26.05.2007
    Это одобряют 14 пользоветелей.
  2. N1K

    N1K New Member

    Регистрация:
    11.02.2007
    Сообщения:
    10
    Одобрения:
    4
    Репутация:
    0
    Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)
     
    Это одобряют 3 пользоветелей.
  3. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    fgets() читает строчку из файла, если используется RTL у тебя
     
    Это одобряет 1 пользователь.
  4. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    27.05.2007 18:14:51, KEZ
    KEZ:

    Code:
    #include <stdio.h>
    
    int main(int argc, char* argv[])
    {
    	char buf[256];
    	FILE *f = fopen( "C:\\1.txt", "r" );
    	while (fgets( buf, 255, f ))
    		strncpy( string, buf, 255 );
    	fclose( f );
    
    	return 0;
    }
    
    где string - очередная переменная в которую положится очередная строка

    27.05.2007 18:15:00, KEZ
    запости *** я забанен(
     
    #4 _Great_, 27.05.2007
    В последний раз редактировалось: 27.05.2007
    Это одобряет 1 пользователь.
  5. ultimatum

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

    Регистрация:
    28.04.2007
    Сообщения:
    145
    Одобрения:
    65
    Репутация:
    -13
    Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
    пример:
    FILE *f = fopen( "http://sait.com", "r" );
    может вопрос мой некоректен , но я думаю поймут )))
     
    Это одобряют 2 пользоветелей.
  6. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    нет, либо UrlDownloadToFile, либо открыть сокет вручную

    от кеза:

    27.05.2007 18:43:17, KEZ

    #include <stdio.h>
    #include <winsock2.h> // хедер с описанием wsa ф-ий

    // для ms vc++6.0 и др - подключаем lib'у с импортами wsa ф-ий
    #pragma comment( lib, "wsock32.lib" )

    int main(int argc, char* argv[])
    {
    char request[1024*5]; // буффер под запрос
    char response[1024]; // буффер под ответ
    sockaddr_in s_a;
    WSADATA wd; // структура WSADATA

    WSAStartup( MAKEWORD( 2, 2 ), &wd ); // инициализируем wsa

    SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // создаем сокет
    if (s == INVALID_SOCKET) return 255; // если ошибка - выход

    s_a.sin_addr.s_addr = inet_addr( "89.108.80.80" ); // айпи сервера, в данном случае - античат.ру
    s_a.sin_port = htons( 80 ); // порт сервера
    s_a.sin_family = AF_INET;

    if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - невозможно подключится к сереверу

    char url[] = "/"; // страница
    char host[] = "antichat.ru"; // хост
    // формируем запрос
    sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host );

    send( s, request, strlen( request ), 0 ); // послать запрос
    recv( s, response, 1023, 0 ); // максимум получить 1023 байта

    printf( "%s\r\n", response ); // вывести ответ на экран

    closesocket( s ); // закрываем сокет
    WSACleanup(); // деинициализируем wsa

    return 0;
    }

    27.05.2007 18:45:56, KEZ
    отпиши от меня кроме кода вот что

    27.05.2007 18:46:28, KEZ
    "далее обрезай шапку ответа сервера (HTTP/1.1 200 OK и т.п.), все оставшееся - будет то, что вернул сервер по запрошеному адресу, например /1.txt. Другие варианты с winapi - InternetReadFile(), UrlDownloadToFile() см.
    msdn..."

    27.05.2007 18:45:09, KEZ
    "альт. вариант - InternetReadFile()"

    27.05.2007 18:45:12, KEZ
    отпиши
     
    #6 _Great_, 27.05.2007
    В последний раз редактировалось: 27.05.2007
    Это одобряет 1 пользователь.
  7. ultimatum

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

    Регистрация:
    28.04.2007
    Сообщения:
    145
    Одобрения:
    65
    Репутация:
    -13
    спасибо KEZ и _Great_ ))) дальше я сам поисом
     
  8. N1K

    N1K New Member

    Регистрация:
    11.02.2007
    Сообщения:
    10
    Одобрения:
    4
    Репутация:
    0
    Короче, смысл проги в том, что... а, ладно щас исходник кину:


    Code:
    
    #include <stdio.h>
    #include <stdafx.h>
    #include <iostream>
    #include <string.h>
    using namespace std;
     
    class massive_s
    {
    public:
    	massive_s (char*, int, float);
        void show_data (void);
    	
    /* void fetch (int); */
    private:
    	char name[64];
    	int marck;
    	float m_marck;
    };
    massive_s::massive_s (char *name, int marck, float m_marck)
    {
    	strcpy (massive_s::name,name);
    	massive_s::marck = marck;
    	massive_s::m_marck = m_marck; 
        if (m_marck > 3.5)
    		strcat (massive_s::name," IIEPEBEDEH");
    	else
    		strcat (massive_s::name," HE IIEPEBEDEH");
    }
    void massive_s::show_data (void)
    {
    	cout <<" Name: "<< name << endl;
    	cout <<" Ocenka: "<< marck << endl;
    	cout <<" Cpednjaja ocenka: " << m_marck << endl;
    }
    
    
    
    
    
    int main (void)
    {
    
    /* здесь нужен код, который считывал бы из вайла построчно переменные, и формировал запрос в конструктор типа:
    massive_s w1(string1, int1, float1); где стринг, интеджер и флоат  - вытащенные из файла переменные (стринг - первая строка, интеджер - 2 и флоат - 3, причем в файле продобных строк 100 (т.е. они чередуюццо:
    Вася Пупкин
    1
    3.3
    Миша Ипачевский-Распиндосов
    4
    4.5
    Саша шнуровской
    5
    3.5
    )
    */
    }
    
    
    
     
    Это одобряет 1 пользователь.
  9. Jes

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

    Регистрация:
    16.04.2007
    Сообщения:
    373
    Одобрения:
    391
    Репутация:
    34
    Вопрос: idHTTPServer ... сохранение удаленного файла на винте(через браузер)...
    TFileStream *fs=new TFileStream(MyFile,fmOpenRead);
    try
    {
    ResponseInfo->ResponseNo=200;
    ResponseInfo->ContentLength= fs->Size;
    ResponseInfo->ContentStream=fs;
    ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n");
    ...
    Сохраняет файл , но в начале файла записывает инфо с запроса (Server: Indy, Content-Length и др) , что в свою очредь убивает его работоспособность...
    как сделать ,чтоб файл нормально записался???
     
    Это одобряют 2 пользоветелей.
  10. Jes

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

    Регистрация:
    16.04.2007
    Сообщения:
    373
    Одобрения:
    391
    Репутация:
    34
    у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ...
    Принимает же обычный браузер...

    считываю же файл для отправки сразу потоком:

    TFileStream *fs=new TFileStream(MyFile,fmOpenRead);
    ResponseInfo->ContentStream=fs; //где ResponseInfo - ответ на запрос...

    забавно, но если убрать строчку :
    ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n");
    , то файл сохранится правильно, но под кривым именем и без расширения...
     
    Это одобряют 2 пользоветелей.
  11. Jes

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

    Регистрация:
    16.04.2007
    Сообщения:
    373
    Одобрения:
    391
    Репутация:
    34
    ... и опять я сам во всем разобрался ,
    строка ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); при добавке первого нового хедера сама формирует остальные , причем вырезать их никак...
    Выход нашел в такой же степени дурацкий, в какой и гениальной:
    в к Content-type прибавляем свою строку с пробелами...(тоесть не используем метод Headers->Add)

    ResponseInfo->ContentType=IdHTTPServer1->MIMETable->GetFileMIMEType(MyFile) + "\r\nContent-Disposition: attachment; filename=" + MyFile;

    при этом никаких символов новых строк в конце, иначе они запишутся в отсылаемый файл...
    ...блин , пол вечера убил на это...
     
    Это одобряет 1 пользователь.
  12. NetMan

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

    Регистрация:
    9.02.2004
    Сообщения:
    121
    Одобрения:
    37
    Репутация:
    34
    sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.
     
    Это одобряет 1 пользователь.
  13. Ky3bMu4

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

    Регистрация:
    3.02.2007
    Сообщения:
    490
    Одобрения:
    285
    Репутация:
    42
    Вот такой вот вопросик возник:
    Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.
     
  14. Joker-jar

    Joker-jar Elder - Старейшина

    Регистрация:
    11.03.2007
    Сообщения:
    583
    Одобрения:
    205
    Репутация:
    37
    Смотри:
    Code:
    #include "vcl.h"
    #include "stdio.h"
    
    DynamicArray <int> massiv; //Динамический массив
    
    int main()
    {
      massiv.set_length(10); //Устанавливаем размер массива
      for (int i = 0; i < massiv.Length; i++)
        {
          massiv[i] = i;
          printf("%d ",massiv[i]);
        }
      getchar();
    }
     
  15. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    А как тогда?

    Joker-jar, лол, а если VCL нету?
     
  16. Ky3bMu4

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

    Регистрация:
    3.02.2007
    Сообщения:
    490
    Одобрения:
    285
    Репутация:
    42
    Если я не ошибаюсь, есть Api функция.
     
  17. Joker-jar

    Joker-jar Elder - Старейшина

    Регистрация:
    11.03.2007
    Сообщения:
    583
    Одобрения:
    205
    Репутация:
    37
    Я показал, как сделать это максимально абстрактно... Если и это не то, то хз.
    Code:
    Но, без всяких malloc, calloc , new и т.д
    Действительно, а как тогда? Это основные методы, чем они так не устраивают? Если возникают сложности, переходи на Делфи, там с этим на порядок легче (SetLength и попер)
     
  18. sni4ok

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

    Регистрация:
    4.11.2006
    Сообщения:
    117
    Одобрения:
    37
    Репутация:
    12
    наверно он не знает, что в с++ есть стандартные контейнеры, поэтому и предлагает всякое платформа-зависимое дерьмо. :(
     
  19. _Great_

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

    Регистрация:
    27.12.2005
    Сообщения:
    2 044
    Одобрения:
    1 119
    Репутация:
    1 139
    sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого.

    зы. только это не часть С++, это stl. большая разница
     
    #19 _Great_, 19.06.2007
    В последний раз редактировалось: 19.06.2007
  20. Joker-jar

    Joker-jar Elder - Старейшина

    Регистрация:
    11.03.2007
    Сообщения:
    583
    Одобрения:
    205
    Репутация:
    37
    Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера
     
Загрузка...
Статус темы:
Тема закрыта для ответов.