Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)
заготовка процедурки:
{
char *sum;
HANDLE hfile = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hfile == INVALID_HANDLE_VALUE){
MessageBox(0, "Файл не найден!", "Рассчет CRC32", MB_OK | MB_ICONINFORMATION);
}
crc32 crc;
char data[512];
DWORD len;
while(ReadFile(hfile, data, 512, &len, NULL) && len)
crc.ProcessCRC(data, len);
CloseHandle(hfile);
_ultoa(crc.m_crc32, sum, 16);
MessageBoxA(0, sum, "Расчет CRC32", MB_OK | MB_ICONINFORMATION);
return;
}
Подскажите, очень прошу, как правильно сделать передачу строки?
заготовка процедурки:
{
char *sum;
HANDLE hfile = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hfile == INVALID_HANDLE_VALUE){
MessageBox(0, "Файл не найден!", "Рассчет CRC32", MB_OK | MB_ICONINFORMATION);
}
crc32 crc;
char data[512];
DWORD len;
while(ReadFile(hfile, data, 512, &len, NULL) && len)
crc.ProcessCRC(data, len);
CloseHandle(hfile);
_ultoa(crc.m_crc32, sum, 16);
MessageBoxA(0, sum, "Расчет CRC32", MB_OK | MB_ICONINFORMATION);
return;
}
Подскажите, очень прошу, как правильно сделать передачу строки?
{
...
char *stroka = new char[MAX_LEN];
...
...
return stroka;
}
ЗЫ: если я правильно суть дела понял
ЗЫ: если я правильно суть дела понял
Правильно понял :) бальшое спасибо.
Написано: на форме кнопки Создать сервер, и присоединиться, ну и создается чат. Такая статья гуляет по нету. Так вот там отсутствует блокировка подключений после первого подключения, т е к серверу подключился клиент, но мне нужно после этого заблокировать сервер, чтобы к нему больше никто не мог подсоединиться.
if (Count==false) {
ChatMemo->Lines->Add("["+TimeToStr(Now())+"]Клиент присоединился");
Count=true;
}
else {
ChatMemo->Lines->Add("["+TimeToStr(Now())+"]Попытка присоединения");
ServerSocket1->Socket->Connections[1]->Close();
}
вот как это я делаю, где Count true если уже присоединен клиент.
Так вот дело в том, что теперь даже если один и тот клиент отключиться, а потом обратно подключиться возникает ошибка List index out of bounds(1). Подскажите ка кисправить или как игнорировать все подключения кроме первого. Заранее спасибо.
Задача собственно у меня следующая: есть некий текст (файл, или поток), где каждый считанный символ нужно преобразовать в другой символ согласно какому-то алгоритму типа x(n+1)=f(x) (по-моему это называется наложением гаммы) и вывалить в файл или в stdout. И вот я пишу:
с = myfunc(c);
putchar(c);
}
Но в результате получается что-то не то: добавляются каки-то левые эскейп-последовательности,или наоборот обрезаются (точно не знаю, т.к. сужу только по поведению stdin). Мне кажется,что будет правильно получить сначала внутреннее представление символа, и с ним уже выполнять какие-то преобразования. А в myfunc() выполнить обратное преобразование и вернуть его значение. Но я не знаю,как мне из символа получить его ASCII код а потом обратно (или может быть какой-нить другой вид удобный для преобразований). Подскажите плиз какие сужествуют для этого механизмы. И как вобще было бы правильно решать такую задачу?
Заранее спасибо.
int i = ch; // i == 13
и
char ch = i; // ch == '\n'
----------------------------------------
in.open("input.txt");
int ooo=0;
while(in)
{
char temp=in.get();
if(temp=='\b'||temp=='\n'||temp=='\r'||temp=='\0'||temp=='\t'||temp=='\v'||temp=='\f'||temp==' ')
continue;
cout<<temp;
ooo++;
}
cout<<ooo<<endl;
in.close();
----------------------------------------
Допустим содержимое файла input.txt "THIS IS MESSAGE", в таком случае на экран выводится "THISISMESSAGEЪ14" , т.е. THISISMESSAGE выводится корректно, 14 - кол-во итераций цикла, (хотя должно быть 13, исходя из кол-ва символов в сообщении, а вот символ "Ъ" не понятен, вроде бы как все пробельные символы режутся ифом, кто знает, подскажите как быть (:"
Компилятор: gcc version 3.4.4 [FreeBSD] 20050518
ОС: FreeBSD 6.1-RELEASE
{
...
char *stroka = new char[MAX_LEN];
...
...
return stroka;
}
ЗЫ: если я правильно суть дела понял
Так делать нельзя!
Иначе придется ещё написать функцию
{
delete[] stroka;
}
Правильнее передавать буфер для заполнения:
Иначе придется ещё написать функцию
{
delete[] stroka;
}
Правильнее передавать буфер для заполнения:
да, стормозил...
можно наверно просто в теле вывывающей ф-ции delete[] stroka; прописать после использования этой строки... хотя это тоже через ж...
можно наверно просто в теле вывывающей ф-ции delete[] stroka; прописать после использования этой строки... хотя это тоже через ж...
Не... нельзя. М.б. проблема с разными хипами.
необходимо создать UDP соединение, клиент посылает набор слов, сервер находит и возвращает одинаковые слова.
С UDP разобрался, сервер все получает, а вот с обработкой проблема.
Попытался решить вот так (шапку опускаю, входящая строка b):
z=b;
while((sscanf(z+=n," %s%n",y, &n))>0) i++;
for (m=0;m<i;m++)
for (p=1;p<i;p++)
if ((y==y[m])&&(p!=m))
Почему здесь не работает савнение y
==y[m]?
Может чего родного по поиску слов в строке есть?
{
public struct Que
{
public:
int x;
};
public struct Fun : public Que
{
public:
int x_F;
MW this_MW;
};
public struct MW
{
public:
int y;
};
}
Visual C++ ругается и говорит:
MW this_MW; error C2146: syntax error : missing ';' before identifier 'this_MW'
может я чего-то недопонимаю? Мне надо создать объект типа MW в этой структуре, как это сделать?
А зачем вы пишете слово public перед struct? Чего вы хотите этим достичь?
Спасибо, помогло.. А насчёт public - а разве не надо? Я хочу показать, что этии структуры доступны отовсюду. Я просто с C# перехожу, разбираюсь по пути...
KakTyC911, вначале подели на 10 в степени на 1 больше, чем указанна в функции, затем остаток на 10 в указанной степени. Может не лучший алгоритм, но работать должен.
Ну, можно конечно и char-ы в int перевести. Например, если кодировка ANSI, то i = (int)(ch - 48). Хотя тут надо подумать - это я на ходу придумал... Лучше наверно воспользоваться функцией atoi
{
while(iPos-- > 0)
iVal /= 10;
return iVal % 10;
}
как найти сумму элементов, расположенных в закрашенной части матрицы на рисунке. там рисунок >> квадрат, закрашено все кроме треугольника (от концов до центра)..получатся такой 5-угольник
_______
| ___ / |
| __ / |
| ___ \ |
| ____ \|
---------
Я пишу маленький TCP чат, есть главный сервер к нему подключаються с помошью клиентской программы, каждый раз когда клиент подключаеться создаеться для него новый потом (thread) с функции CreatThread().Вот а сейчас вопрос, когда один клиент пришлеть сообщение нужна ее переслать к всем подключенным клиентам, как этого достичь ??
Заранее спасибо.
Я пишу маленький TCP чат, есть главный сервер к нему подключаються с помошью клиентской программы, каждый раз когда клиент подключаеться создаеться для него новый потом (thread) с функции CreatThread().Вот а сейчас вопрос, когда один клиент пришлеть сообщение нужна ее переслать к всем подключенным клиентам, как этого достичь ??
Заранее спасибо.
циклом пробежаться по всем HANDLE созданных процессов и разослать
Пробежаться HANDLE или ThreadID ??
CreateThread(...) возвращает HANDLE, по ним и бегать (предварительно можно в массив их запихать)
ЗЫ: хотя наверно можно по ThreadID (я не знаю как у Вас организовано)
ЗЫ: хотя наверно можно по ThreadID (я не знаю как у Вас организовано)
У меня код выглядит примерно так:
DWORD ThreadID;
if((h = CreateThread(NULL,0,threadFunc,(LPVOID)socket,0,&ThreadID)) != NULL){
printf("ok\n");
}
DWORD ThreadID;
if((h = CreateThread(NULL,0,threadFunc,(LPVOID)socket,0,&ThreadID)) != NULL){
printf("ok\n");
}
самое простое, это завести некий флаг в потоке основного приложения типа LPSTR, корорый в threadFunc проверять на NULL и если он оттличен от NULL то каждый поток рассылает его по своим сокетам, типа того:
{
while (user == active)
{
//обработка сообщений ит юзера
if (NewUserFlag) SendMessage(NewUserFlag, m_pSocket);
}
}
Хорошая идея,спасибо.
Если понимать так, что у части элементов двумерного массива значение первого типа, а у другой части - второго типа, и надо найти число элементов со значенями первого типа, то следует пройтись по массиву и и наращивать значение счетчика, если значение элемента первого типа.
Мда... вероятно, не очень ясный ответ, но какой вопрос, такой и ответ :)
Я сейчас помогу. :mad:
Выдам нарушение за игнорирование правил форума.
Если что не понятно - читаем мою подпись.
Сообствено немогу придумать как релизовать проверку на чередование . На ум приходит только полностью прописывать алфавит :
If (s==(’a’)|| (’e’)|| (’i’)|| (’o’)|| (’u’) && s[i+1]== (’b’)|| (’c’)|| (’d’) ну и так далее…
Может ктото знает вариант попроще?
p.s. язык обычный С
int main()
{
mpz_t i;
mpz_init (i);
return 0;
}
C:/WINDOWS/TEMP/ccUPbaaa.o:1.cpp:(.text+0x31): undefined reference to `__gmpz_init'
collect2: ld returned 1 exit status
В чем проблема?
ничего в головку не приходит, кроме как завести 2 массива в 1вом будут гласные, во 2ром - согласные, и проверять каждый раз на вхождения в эти массивы,для массивов можно написать простую обертку.
Есть функция f(char cValue)
при этом '0'<=cValue<='7'. т.е. от 0 до 7 и никаких других значений.
В программке формируется переменная int Value. как ее передать функции? У мну получается вызывать только как f('0'); и т.д. а вот подставить значение не знаю как. не switch-ем же перебирать :(
#include <stdlib.h>
#include <stdio.h>
/* Определение структурного типа "Звено списка":*/
struct cell {
char sign [10];
int weight;
struct cell * pc;
};
void main()
{
/* Указатель для перебора звеньев списка: */
struct cell * rex;
struct cell * beg=NULL; /* Начало списка */
struct cell * end=NULL; /* Конец списка */
printf ("\nВведите значения структур:\n");
/* Цикл ввода и формирования списка */
do
{ /* Выделить память для очередного звена списка: */
rex=(struct cell *)malloc(sizeof(struct cell));
/* Ввести значения элементов звена: */
printf("sign=") ;
scanf("%s",& rex->sign) ;
printf("weight=") ;
scanf("%d",& rex->weight);
if (rex->weight == 0)
{
free(rex) ;
break; /* Выход из цикла ввода списка */
}
/* Включить звено в список: */
if (beg==NULL && end==NULL)
/* Список пуст – включить введенный элемент в список первым*/
beg=rex;
else /* Включить звено в уже существующий список */
end->pc=rex;
end=rex ;
end->pc=NULL ;
}
while(1) ; /* Конец ввода списка */
/* Напечатать список */
printf Rus("\nСодержимое списка:") ;
rex=beg;
while (rex!=NULL)
{
printf("\nsign=%s\tweight=%d",rex->sign,rex->weight) ;
rex=rex->pc;
}
}
Здесь выводится односвязный список...
в данном примере по вводу 0 в поле weight происходит выход из цикла...
а мне нужно сделать что бы при вводе *** происходил выход...
помогите объявит ***
Имею такую монструозную штуку:
{
int lections,
seminars,
kurs,
kolvo_sub_gr;
String group;
};
typedef map<String, Properties> Info; //<Имя преподвателя><Св-ва>
typedef map<String, Info> Predmet; //<Название предмета><Имя преподвателя>
Predmet pred;
Зная ключ контейнера pred, мне нужно проверить свойство Properties::group на предмет совпадения с некой переменной.
Пишу:
for (p = pred.begin(); p != pred.end(); ++p)
{
if ( p->first == predmet )
{
// и все, дальше тупик.
}
}
Как обратиться у этим элементам внутри контейнера?