Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [c/c++] Новичкам: задаем вопросы (https://forum.antichat.xyz/showthread.php?t=40894)

_Great_ 26.05.2007 14:21

[c/c++] Новичкам: задаем вопросы
 
В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.

N1K 27.05.2007 17:58

Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)

_Great_ 27.05.2007 18:02

Цитата:

Сообщение от N1K
Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)

fgets() читает строчку из файла, если используется RTL у тебя

_Great_ 27.05.2007 18:16

27.05.2007 18:14:51, KEZ
KEZ:

Код:

#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
запости *** я забанен(

ultimatum 27.05.2007 18:31

Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
пример:
FILE *f = fopen( "http://sait.com", "r" );
может вопрос мой некоректен , но я думаю поймут )))

_Great_ 27.05.2007 18:34

Цитата:

Сообщение от ultimatum
Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
пример:
FILE *f = fopen( "http://sait.com", "r" );
может вопрос мой некоректен , но я думаю поймут )))

нет, либо 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
отпиши

ultimatum 27.05.2007 19:00

спасибо KEZ и _Great_ ))) дальше я сам поисом

N1K 27.05.2007 19:15

Цитата:

Сообщение от _Great_
27.05.2007 18:14:51, KEZ
KEZ:

Код:

#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
запости *** я забанен(

Короче, смысл проги в том, что... а, ладно щас исходник кину:


Код:


#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
)
*/
}


Jes 30.05.2007 17:37

Вопрос: 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 и др) , что в свою очредь убивает его работоспособность...
как сделать ,чтоб файл нормально записался???

Jes 30.05.2007 23:12

у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ...
Принимает же обычный браузер...

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

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

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

Jes 31.05.2007 02:07

... и опять я сам во всем разобрался ,
строка 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;

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

NetMan 12.06.2007 18:24

sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.

Ky3bMu4 19.06.2007 13:11

Вот такой вот вопросик возник:
Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.

Joker-jar 19.06.2007 14:32

Смотри:
Код:

#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();
}


_Great_ 19.06.2007 15:04

Цитата:

Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.
А как тогда?

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

Ky3bMu4 19.06.2007 15:09

Если я не ошибаюсь, есть Api функция.

Joker-jar 19.06.2007 15:30

Я показал, как сделать это максимально абстрактно... Если и это не то, то хз.
Код:

Но, без всяких malloc, calloc , new и т.д
Действительно, а как тогда? Это основные методы, чем они так не устраивают? Если возникают сложности, переходи на Делфи, там с этим на порядок легче (SetLength и попер)

sni4ok 19.06.2007 15:44

Цитата:

Сообщение от _Great_
А как тогда?

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

наверно он не знает, что в с++ есть стандартные контейнеры, поэтому и предлагает всякое платформа-зависимое дерьмо. :(

_Great_ 19.06.2007 15:50

sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого.

зы. только это не часть С++, это stl. большая разница

Joker-jar 19.06.2007 15:58

Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера

_Great_ 19.06.2007 16:05

Stl в любой нормальный компилер входит.
А ты уверен что твой Vcl скомпилится в любом компилере просто так? Его еще сливать отдельно надо.
Я тоже могу написать супер-пупер библиотеку. А смысл? В Stl есть все, что нужно. Ну, или почти всё.

nerezus 19.06.2007 18:59

Цитата:

зы. только это не часть С++, это stl. большая разница
Только это не часть собаки, а ее ухо. Это большая разница.

С каких пор STL перестал быть частью C++?

Цитата:

Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных
Если удобнее юзать STL -юзай его. Если VCL - то VCL. Ты уверен, что тебе удобнее именно VCL?

_Great_ 19.06.2007 19:24

с каким пор вещь, сделанная на инструменте, является частью инструмента?

хотя отчасти это и часть С++... вообщем тавтология какаято )

nerezus 19.06.2007 19:26

Цитата:

с каким пор вещь, сделанная на инструменте, является частью инструмента?
Т.е. если я сырцы компилера скомпилю этим же компилером, то он перестанет быть компилером? )) Это типа пример.
А Stl — часть C++

Great: Часть, не часть - спорить бесполезно =) Ладно, заканчиваем оффтоп :)

bxN5 19.06.2007 20:58

wtf системные переменные дайте почитать!

sni4ok 19.06.2007 21:42

Цитата:

Сообщение от _Great_
с каким пор вещь, сделанная на инструменте, является частью инструмента?

язык это то, что описано в стандарте, а в стандарте stl описан, поэтому я солидарен с nerezus'ом.
ну а инструментом уже можно считать отдлельные реализации c++, такие как microsoft, borland, gcc и пр.
при этом чтобы инструмент имел в названии слово "с++" обязан поддерживать stl.

scrat 19.06.2007 21:55

что такое препроцессор и метапрограммирование?
в какой переменной лежит длинна строки(класс string)?
как построчно читать файл в вектор до конца файла(библиотека fstream)?
как работать с tcp/ip в с++?

nerezus 19.06.2007 22:17

Цитата:

как работать с tcp/ip в с++?
Никак. Только с помощью средств ОС либо либ или фреймворков.

Цитата:

в какой переменной лежит длинна строки(класс string)?
Например _M_length типа size_type структуры _Rep_base класса basic_string. Это зависит от реализации. И вообще тупой вопрос. Юзай метод length().

_Great_ 19.06.2007 22:24

Цитата:

что такое препроцессор и метапрограммирование?
Это откровенный словарный ворпос. go 2 wiki
Цитата:

как работать с tcp/ip в с++?
Тебе стоит прочитать про сокеты
В двух словах:
socket создает сокет, connect соединяется с хостом, send/recv отправляет/получает данные.

scrat 19.06.2007 22:41

Цитата:

Сообщение от _Great_
Это откровенный словарный ворпос. go 2 wiki

в вики есть слово триграф которого нет в вики.что это?

slesh 19.06.2007 22:59

ну юзай тогда API функцию - VirtualAlloc

_Great_ 20.06.2007 10:33

Тема разделена. Триграфы в C/C++

Joker-jar 20.06.2007 18:38

Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.

_Great_ 20.06.2007 18:39

Получить параметры видеорежима через прерывание Bios'а номер 10 (если под досом)

Ky3bMu4 21.06.2007 18:21

Разобрался с malloc`ом.
http://www.codenet.ru/progr/visualc/esmall/add.txt
Мож кому пригодится.

scrat 24.06.2007 16:52

более-менее выучил с++ какой api учить?

iv. 24.06.2007 17:25

Цитата:

Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.
Ассемблерной вставкой можно узнать текущий видеорежим:

mov AH, 0Fh
int 10h

Тогда в AL будет номер режима. Но нафик это тебе? Текстовых режима по размерам всего два: 25*40 и 25*80. Поэтому в любом случае количество символов на одной строке - 25 (обычно, если ты конечно не будешь извращаться с текстом в графическом режиме - тут уже только прямым посчетом).

ZaCo 24.06.2007 17:44

2scrat программируешь под win32 - winapi32, под юникс-системы posix, systemv и т.п. но первого я думаю хватит...

_Great_ 24.06.2007 17:44

Цитата:

Сообщение от scrat
более-менее выучил с++ какой api учить?

Не ясен вопрос.

scrat 24.06.2007 17:51

Цитата:

Сообщение от ZaCo
2scrat программируешь под win32 - winapi32, под юникс-системы posix, systemv и т.п. но первого я думаю хватит...

posix=сишник.мне хочеться выучить чисто плюсовый апи.но всё-же курс позикса на интуите почту


Время: 06:32