[ 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. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.
     
    #1 _Great_, 26 May 2007
    Last edited: 26 May 2007
    14 people like this.
  2. N1K

    N1K New Member

    Joined:
    11 Feb 2007
    Messages:
    10
    Likes Received:
    4
    Reputations:
    0
    Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)
     
    3 people like this.
  3. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    fgets() читает строчку из файла, если используется RTL у тебя
     
    1 person likes this.
  4. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    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 May 2007
    Last edited: 27 May 2007
    1 person likes this.
  5. ultimatum

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

    Joined:
    28 Apr 2007
    Messages:
    142
    Likes Received:
    65
    Reputations:
    -13
    Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
    пример:
    FILE *f = fopen( "http://sait.com", "r" );
    может вопрос мой некоректен , но я думаю поймут )))
     
    2 people like this.
  6. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    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 May 2007
    Last edited: 27 May 2007
    1 person likes this.
  7. ultimatum

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

    Joined:
    28 Apr 2007
    Messages:
    142
    Likes Received:
    65
    Reputations:
    -13
    спасибо KEZ и _Great_ ))) дальше я сам поисом
     
  8. N1K

    N1K New Member

    Joined:
    11 Feb 2007
    Messages:
    10
    Likes Received:
    4
    Reputations:
    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 person likes this.
  9. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    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 people like this.
  10. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ...
    Принимает же обычный браузер...

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

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

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

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    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 person likes this.
  12. NetMan

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

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.
     
    1 person likes this.
  13. Ky3bMu4

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

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Вот такой вот вопросик возник:
    Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.
     
  14. Joker-jar

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

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    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 - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    А как тогда?

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

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

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Если я не ошибаюсь, есть Api функция.
     
  17. Joker-jar

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

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Я показал, как сделать это максимально абстрактно... Если и это не то, то хз.
    Code:
    Но, без всяких malloc, calloc , new и т.д
    Действительно, а как тогда? Это основные методы, чем они так не устраивают? Если возникают сложности, переходи на Делфи, там с этим на порядок легче (SetLength и попер)
     
  18. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    наверно он не знает, что в с++ есть стандартные контейнеры, поэтому и предлагает всякое платформа-зависимое дерьмо. :(
     
  19. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого.

    зы. только это не часть С++, это stl. большая разница
     
    #19 _Great_, 19 Jun 2007
    Last edited: 19 Jun 2007
  20. Joker-jar

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

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера
     
Thread Status:
Not open for further replies.