PDA

Просмотр полной версии : [c/c++] Новичкам: задаем вопросы


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22

GenTao
18.10.2009, 14:35
Возникла ещё проблема - хочу без использования методов класса в мэйне вывести значение компонента х класса Sum,а мне метод возвращает адрес на этот компонент,а не его содержимое.Как исправить ?



#include <stdio.h>
#include <conio.h>
#include <iostream>

using namespace std;

class Sum {

public:

int x,y,s;
int vhod_1(int x) { x = 5;}
int vhod_2(int y) { y = 3;}

};


int main() {

Sum fuck,*s = &fuck;
cout << s -> vhod_1(5);
getch();

}

razb
18.10.2009, 14:51
int vhod_1(int x) { x = 5;}
Ты здесь видишь что бы где то значение возвращалось? я нет.

GenTao
18.10.2009, 14:52
А как же int перед методом ?Понял свою ошибку...А адрес вернулся на что ?На метод чтоли? Если так,то тогда как два метода могут размещаться по одному адресу ? У меня вернуло 2293116 или вроде того,когда я обращался к двум методам после двух компиляций.

t4Nk
18.10.2009, 14:55
Sum fuck,*s = &fuck;
cout << s -> vhod_1(5);


йопт, GenTao, на предыдущей странице писал про приоритет оператора "<<". В скобках надо писать:
std::cout << (s -> vhod_1(5));

Ra$cal
18.10.2009, 15:25
А адрес вернулся на что ?На метод чтоли? Если так,то тогда как два метода могут размещаться по одному адресу ? У меня вернуло 2293116 или вроде того,когда я обращался к двум методам после двух компиляций.

возвращается значение регистра eax. т.е. рандомный мусор. так же будет если использовать неинициализированную локальную переменную.

PS: x - не компонента. это поле, член данное. В какой буке поле называют компонентой?

GenTao
18.10.2009, 15:38
Компонент х всмысле переменная).А книга наз. Программирование на С++ Хоменко какого-то

Gin
19.10.2009, 01:45
Хотел написать простенькую програмульку которая читает из файла строки и по указанному раделителю заносит результат в другой файл.

Пример:
входной файл
тратата : не нужная ***ня
выходной
тратата

вот код, он компилируеться, но при выполнении выдает ошибку str2 being used without beiing defined.
Может дело в файле или еще что-то

вот сам код

// word_parser.cpp : Defines the entry point for the console application.
//


#include <iostream>
using namespace std;

int main()
{
FILE *fp,*fp2;
unsigned int t;
char buff[100],*str,*str2;


fp=fopen("keys.txt","r+");
fp2=fopen("key_pasrse.txt","w+");
while(!feof(fp)){
str=fgets(buff,100,fp);
t=strspn(str,":");
strncpy(str2,str,t+1);
fputs(str2,fp2);

}

return 0;


Спасибо.

Ra$cal
19.10.2009, 01:55
str2 - указатель, содержащий мусор(пару постов выше прочитай мой). ты используешь переменную не задав ей значения. в данном случае ты пытаешься писать в хзкакой участок памяти.

Gin
19.10.2009, 02:05
2Ra$cal

Я пробовал str2= new char[100];
тогда просто при выполнении выдавало ошибку и предлагала дизасемблировать. Уже начал заниматься шаманством, но помоему вредный процесс работа программы это же не волшебство. Так что взываю к сообществу, направить на путь.

ichechen
19.10.2009, 02:15
2Ra$cal

Я пробовал str2= new char[100];
тогда просто при выполнении выдавало ошибку и предлагала дизасемблировать. Уже начал заниматься шаманством, но помоему вредный процесс работа программы это же не волшебство. Так что взываю к сообществу, направить на путь.

Я не знаю ни С не С++, и все таки, а нельзя сделать что то вроде:
str=str.Replace(':','\n') ?
Это я написал как на C# но думаю функция Replace и в С должна быть)))

Gin
19.10.2009, 02:17
2ichechen

нет нельзя так как после разделителя есть еще текст и наверное не /n а \r\n

rudvil
19.10.2009, 02:19
Я не знаю ни С не С++, и все таки, а нельзя сделать что то вроде:
str=str.Replace(':','\n') ?
Это я написал как на C# но думаю функция Replace и в С должна быть)))
Смысл менять разделитель на новую строку?
Ведь нужно брать только то что до разделителя, а остальное пропускать до новой строки....

ichechen
19.10.2009, 02:40
2ichechen

нет нельзя так как после разделителя есть еще текст и наверное не /n а \r\n
Ну да, '\n' - хотел написать, он в C# тоже конец строки)

А сообразить типа:
Считываем строку
создаем промежуточную переменную и
добавляем все символы считанной строки (посредством цикла) пока буква не будет = ":", при совпадении заканчиваем цикл и переходим к следующей строке)))

Если тебе нужна только программка (.exe) могу сделать)))

Gin
19.10.2009, 10:50
2ichechen
Мне не столь нужен экзешник сколько, понять почему не работает этот код. Вопрос остаеться открытым.

Lee_fx
19.10.2009, 11:41
// word_parser.cpp : Defines the entry point for the console application.
//


#include <iostream>
using namespace std;

int main()
{
FILE *fp,*fp2;
char buff[100],*str,*str2;


fp = fopen("keys.txt","r+");
fp2 = fopen("key_pasrse.txt","w+");
while(!feof(fp)){
str=fgets(buff,100,fp);
str2=strtok(str,":");
fputs(str2,fp2);
}

return 0;
}

Gin
19.10.2009, 11:52
2Lee_fx
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.

Lee_fx
19.10.2009, 12:34
2Lee_fx
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.
t=strspn(str,":");
тут t = 0, не та функция
попробуй strcspn

Ra$cal
19.10.2009, 19:01
Gin
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.

Попробуй воспользоваться отладчиком дял начала. У тебя же в уме должен быть примерный лог работы программы? Вот и сравнивай с реальностью.

cupper
20.10.2009, 21:09
как лучше и проще всего хранить множество двумерных матриц???? При условии что их колличество и их размерность заранее не определены.

второй раз сталкиваюсь с такой задачей. В первый раз пришел к тому что удобнее всего двумерную матрицу хранить в разложенное виде в векторе,
м для хранения всех таких векторов использовать тоже вектор:
vector<vector<int> > matrix;

есть у кого альтернативные идеи ?

Irdis
21.10.2009, 00:51
list<list<int>>
=)
вариант,например, через вектор всё ок будет

razb
21.10.2009, 12:57
2cupper

stl vector + boost matrix
_http://www.boost.org/doc/libs/1_40_0/libs/numeric/ublas/doc/matrix.htm

razb
22.10.2009, 14:59
2Martyr ты ошибся разделом, тебе в соседний тред.

GroodeR
22.10.2009, 15:03
Вообщем у меня проблема, мне помогли написать программу, вот я её как бы оформил.


#include <iostream.h>
void dohod (double L, double p,int d){
double s=0;
s=L*((p/364)*d);
cout << endl << "Polucenai ssuma: " << s;
}


Компелятор ругаеться


g++.exe -x c++ -c H:\DOCUME~1\9335~1\0016~1\1212 -o H:\DOCUME~1\9335~1\0016~1\1212.o -Wall -fpermissive
g++.exe H:\DOCUME~1\9335~1\0016~1\1212.o -o H:\DOCUME~1\9335~1\0016~1\1212.exe -Wall -fpermissive
..\lib\gcc-lib\libmingw32.a(main.o)(.text+0x8e): undefined reference to `WinMain@16'
Failure


Как правильно оформить, помогите плс. Я новичёк.

Irdis
22.10.2009, 16:05
Вообщем у меня проблема, мне помогли написать программу, вот я её как бы оформил.

Компелятор ругаеться
Как правильно оформить, помогите плс. Я новичёк.
#include <iostream>
using namespace std;
double dohod (double L, double p,int d){
return L*((p/364)*d);
}
int main()
{
double a,b;
int c;
cin>>a>>b>>c;
cout << "Polucenai ssuma: " << dohod(a,b,c);
return 0;
}
правильно компилятор

StriplOol
22.10.2009, 18:08
такой вопрос уважаемые:
каким образом осуществляется изменение приложения (ехе файла)?
Опишу в кратце что мне надо сделать:
сделать лоудер который бы изменял ехе файл ( а именно пакеты с которыми он будет работать, но не суть)

Ra$cal
22.10.2009, 19:02
в подфорум Реверсинг загляни. Делается все обычно в два этапа - сначала руками с помощью ollydbg или другого отладчика получаешь нужный результат, потом кодируешь изменение нужных байт в программе своей через WriteProcessMemory или инжект длл. Ну и все.

[n]-c0der
22.10.2009, 19:07
Подскажите что я не так делаю?


int WriteToAutoRun(char * path, char * name)
{
HKEY hKey;
long iRet;
long iRetOpen;

iRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey);

if ( iRet == 0)
{
long set = RegSetValueEx(hKey,(LPCWSTR)name,NULL,REG_SZ,(BYTE *)path ,sizeof(path)+1);
printf(" - %d",set);
}
RegCloseKey( hKey );
return 0;
}

Ошибка = 2...

Ra$cal
22.10.2009, 19:14
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'

как вообще удалось заставить код выполниться, если он банально не комплиируется? =)

[n]-c0der
22.10.2009, 20:31
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'

как вообще удалось заставить код выполниться, если он банально не комплиируется? =)
error C2664: 'RegSetValueExW' : cannot convert parameter 2 from 'LPCSTR' to 'LPCWSTR'
=), Вот почему компилится. ВОт тогда в чем ошибка?

Ra$cal
22.10.2009, 20:59
sizeof(path)+1

как минимум это не правильно. это применимо только для статических массивов.

[n]-c0der
22.10.2009, 21:00
sizeof(path)+1

как минимум это не правильно. это применимо только для статических массивов.
Уже понял))), спс.
ВОт рабочий вариант:

int WriteToAutoRun(char * path, char * name)
{
HKEY hKey;
long iRet;
long iRetOpen;

iRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE,(LPCSTR)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\ \", 0, KEY_SET_VALUE, &hKey);
printf("%d",iRet);
if ( iRet == 0)
{
long set = RegSetValueExA(hKey,(LPCSTR)name,NULL,REG_SZ,(BYTE *)path ,strlen(path)+1);
printf(" - %d",sizeof(path));
}
RegCloseKey( hKey );
return 0;
}

desTiny
22.10.2009, 21:06
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'

как вообще удалось заставить код выполниться, если он банально не комплиируется? =)

WinReg.h:
#ifdef UNICODE
#define RegOpenKeyEx RegOpenKeyExW
#else
#define RegOpenKeyEx RegOpenKeyExA
#endif // !UNICODE

:rolleyes:

Ra$cal
22.10.2009, 21:42
просто не упомянуто что студия видимо 2008, а я в 2003 работаю =)

ZEXEL
23.10.2009, 10:08
7zip API для C++ ?
Кто подскажет ?

StriplOol
23.10.2009, 13:14
Здравствуйте, кто может:
Продемонстрировать код простейшего сервера и клиента
нужно чтобы клиент конектился к серверу и ему выводилось успешный конект или нет.

razb
23.10.2009, 13:27
7zip API для C++ ?
Кто подскажет ?
http://www.7-zip.org/

Здравствуйте, кто может:
Продемонстрировать код простейшего сервера и клиента
нужно чтобы клиент конектился к серверу и ему выводилось успешный конект или нет.
http://www.example-code.com/vcpp/socket.asp

DiHWO
24.10.2009, 07:41
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.

new-sl
24.10.2009, 09:07
мине нужен калкулатор каторыи описан в книги Bjarne Stroustrup-а желателно с описанием зарание спасибо

StriplOol
24.10.2009, 11:53
http://www.example-code.com/vcpp/socket.asp
Спасибо очень хороший сайт

mailbrush
24.10.2009, 12:27
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.
Первая страница этой темы.

Ins3t
24.10.2009, 12:48
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.

Можешь юзать WinSock API, см. мсдн..

Или класс грейта для работы с сокетами:
http://forum.antichat.ru/thread27529.html

DiHWO
24.10.2009, 14:32
mailbrush, я ее не смотрел )) А что ты по аске сказать немог? ))) Ins3t, мне статья нужна....

DiHWO
24.10.2009, 14:34
чеж я так туплю.......этож тема про си, а мне для дельфи надо....
Оемое, этож тема про си, а мне про дельфи надо

rudvil
24.10.2009, 15:28
C++
Почему это компилится void* strTest = (void*)"Hello World!\n";
std::cout << "str test: " << (char*)strTest << "\n";

void* intTest = (void*)123456;
std::cout << "int test: " << (int)intTest << "\n";
А это нет void* dblTest = (void*)(123.456);
std::cout << "dbl test: " << (double)dblTest << "\n";
Пишет error C2440: 'type cast' : cannot convert from 'double' to 'void *' смысл ощибки понятен, но... как тогда преобразовывать double в void и наоборот?

Irdis
24.10.2009, 15:41
..
double a=1.0;

void* b=&a;
cout<<*(double*)(b);

Irdis
24.10.2009, 15:51
up
тупо разыменование

rudvil
24.10.2009, 15:53
Все работает на ура, большое спасибо! :)

kopBaJIoJI
24.10.2009, 18:52
Подскажите функцию, чтобы виндоусовский курсор мыши наблюдался поверх всех программ и полноэкранных приложений. Заранее благодарен.

Ra$cal
24.10.2009, 19:37
нету такой функции

-m0rgan-
24.10.2009, 19:40
Привет, одепты!
Подскажите пожалуйста, как выделить память под я-ю ?

char func(const char * bla)
{
char * buffer[1024];
...
return buffer;
}

Конпелятор ругаеццо.
Мне нужно чтоб ф-я возвратила значение находящееся в массиве буффер.
Размер значения к примеру 1024 байт.

Зарание спасибо!

Lee_fx
24.10.2009, 19:47
Возвращай указатель
char* func(const char * bla)
{
char * buffer = new char[1024];
...
return buffer;
}

Irdis
24.10.2009, 19:49
ты создаёшь двумерный массив... и не инициализируешь его
вотЪ так

char* a= new char[1024];
return a

или так
char a[1024];//wrong
return a;//wrong

Ra$cal
24.10.2009, 20:15
читайте сообщения компилятора, и буедт вам понятно, почему он ругается. вы возвращаете указатель на память, выделенную на стеке. это означает что при выходе из функции этот участок памяти становится запрещенным для использования. Чтобы понять, почему так происходит, советую воспользоваться ollydbg и покурить на тему "стек".

ps: мда. у моргана ошибка в другом( в описании функции неправильный тип), но по сути он получил бы проблему, которую я описал, так что так

Irdis
в твоем случае правилен первый вариант. Во втором будет пересоздан массив, т.к. ты возвращаешь объект(в данном случае переменная, но суть аналогии с конструктором копирования классов)

new-sl
24.10.2009, 20:36
кто знает алгоритм извличения корньа и возвидение в степень на с++

-m0rgan-
24.10.2009, 20:41
2new-sl
Извлечения корня: sqrt()
В степень a * a
Либа math.h

Ins3t
24.10.2009, 20:46
Для возведения в степень используеться функия pow
Синтаксис:

double pow(double x, double y);

Ra$cal
24.10.2009, 21:05
корень извлекается так же с pow. квадратный
pow(4, 0.5);

Ins3t
24.10.2009, 21:19
Ra$cal, для квадратного корня предназначена ф-я sqrt()
А вот для кубического и т д, можно уже юзать pow()
Типа
pow(a, 0.3);
pow(a, 0.25);
pow(a, 0.2);
И так далее.

Ra$cal
24.10.2009, 21:21
Ra$cal, для квадратного корня предназначена ф-я sqrt()
А вот для кубического и т д, можно уже юзать pow()
Типа
pow(a, 0.3);
pow(a, 0.25);
pow(a, 0.2);
И так далее.

спасибо, а то я не знал

Ins3t
24.10.2009, 21:24
Ra$cal, я понимаю что ты это знал, но цель моего поста была не в том, чтобы "научить тебя чему то", а в том, чтобы сказать что для извличения квадратного корня придумали ф-ю sqrt(), и нету смысла извращатся с pow().

Ну надеюсь ты понял, что я хотел сказать.

new-sl
24.10.2009, 21:29
я нехачу исполозовать ети функции (матх) мине нужен алгоритм ! извлечения корня и возвидения в сепень

Irdis
24.10.2009, 21:40
например так
http://ru.wikipedia.org/wiki/Бином_Ньютона

Ra$cal
24.10.2009, 21:44
http://upload.wikimedia.org/math/7/2/d/72d9474fac355a81f3d8b12352934245.png

для извличения квадратного корня придумали ф-ю sqrt(), и нету смысла извращатся с pow().
а мой ответ был для тех, кто забыл основы математики, и я им напомнил эти основы, на примере квадратного корня. про sqrt итак написали 2 или 3 человека подряд. и все при упоминании pow говорили о возведении в степень, так что я разбавил этот ор.

xxxxxxxxxxxxxxx
25.10.2009, 02:34
для кубического корня тоже придумали cbrt()/ cbrtf() / cbrtl() ;)

slesh
25.10.2009, 10:55
а еще лучше универсальную формулу для извлечения корня любой степени. А именно:

y = exp(ln(x) / n)
где x - число, n - степень корня

StriplOol
25.10.2009, 13:12
ыфв.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__gethostbyname@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSAGetLastError@0 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
C:\Documents and Settings\Пользователь\Рабочий стол\C++\ыфвфвыф\Debug\ыфвфвыф.e xe : fatal error LNK1120: 11 unresolved externals
Чего не хватает мне? или что сделать, использую пример клиента с сайта http://www.citforum.ru/book/cook/winsock.shtml
и если не затруднит посомтрите там же пример сервера там синтаксическая ошибка

razb
25.10.2009, 13:24
я нехачу исполозовать ети функции (матх) мине нужен алгоритм ! извлечения корня и возвидения в сепень
Если интересует реализация, можешь глянуть тут
_http://swtch.com/usr/local/plan9/9pm/src/libc/port/sqrt.c
_http://swtch.com/usr/local/plan9/9pm/src/libc/port/pow.c

Чего не хватает мне? или что сделать, использую пример клиента с сайта http://www.citforum.ru/book/cook/winsock.shtml
и если не затруднит посомтрите там же пример сервера там синтаксическая ошибка
Забыл прилинковать библиотеку

-m0rgan-
25.10.2009, 19:27
Господа, помагайте!
...
char a[] = "bla";
char b[] = "olo";
char c[] = a xor b;
...

Получаю еррор:

...
\***\***.cpp|26|error: invalid operands of types `char[4]' and `char[4]' to binary `operator^'|
...


Как бэ это исправить?

-m0rgan-
25.10.2009, 19:49
Актуально!

n4e/\@
25.10.2009, 20:26
А что сделать то надо?

rudvil
25.10.2009, 20:36
Господа, помагайте!
...
char a[] = "bla";
char b[] = "olo";
char c[] = a xor b;
...

Получаю еррор:

...
\***\***.cpp|26|error: invalid operands of types `char[4]' and `char[4]' to binary `operator^'|
...


Как бэ это исправить?

ксорить можно числа, но не массив чаров.

Ra$cal
25.10.2009, 20:41
да и нет такого ключевого слова "xor". есть ^

-m0rgan-
25.10.2009, 20:59
а какая ему разница что ксорить?
Там на выходе должна получится бинарная срока, как и в пхп

Ra$cal
25.10.2009, 21:04
ну так а зачем ты пытаешься писать программы на с++, используя знания php? пиши на пхп. или читай доки.
ps: за это и не люблю php кодеров. нет чтобы напрячься и почитать. нееет, напишу что придет в голову, скомпилю, и на форум спрашивать. включай моск или удаляй c++.

draliokero
26.10.2009, 02:21
Помогите, есть консольная тулза, нужно передать вывод и управление моей программе.
Т.е. запускаю тулзу и запускаю свою прогу, в моей проге отображается вывод из тулзы, также, возможность отправки команд в окно тулзы. Как реализовать?

Отправку попробывал сделать так:
#include <iostream>
#include <windows.h>

int main(){
HWND Wnd;
Wnd = FindWindow(0, "C:\\WINDOWS\\system32\\cmd.exe");

char* command = "ping";

for(int i=0; i<strlen(command); i++){
SendMessage(Wnd, WM_CHAR, (LPARAM)command[i], (LPARAM)1);
}

SendMessage(Wnd, WM_CHAR, 13, 0); // эмуляция нажатия enter
}



для чтения нашел ReadConsoleOutput как использовать, помогите с примером для cmd.exe

eldar85
26.10.2009, 11:13
Привет всем. Прошу помочь в интеграции cURL в vusual studio 2008... если кто знает опишите пожалуйста пошагово. Буду очень благодарен.

new-sl
26.10.2009, 13:03
у меня 1 проблема почему ето непашет в Java а в с++ идет? как исправить

public enum Token_value { NAME, NUMBER, END,
PLUS="+", MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=")" };

StriplOol
26.10.2009, 13:10
Забыл прилинковать библиотеку
а какую? iostrem я пролинковал что ещё надо

razb
26.10.2009, 13:42
public enum Token_value { NAME, NUMBER, END,
PLUS="+", MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=")" };
Хоть и джаву знаю слабо, но все же, в джаве перечисление это класс, для инициализации переменных должен быть определен конструктор Token_value
Исправить это можно читая соответствующую литературу )

а какую? iostrem я пролинковал что ещё надо
винсок (ws2_32) и почитай какой нибудь учебник по С/С++

draliokero
26.10.2009, 14:47
Неужели, никто не знает, как получить текст из другого консольного окна?
Пробовал ReadConsoleOutput не получается :(

Ra$cal
26.10.2009, 14:50
инжект тока насколько я помню. а там GetStdHandle вроде и вперед с песнями.

draliokero
26.10.2009, 15:00
Ra$cal, вроде AttachConsole. Просто сложно примеры нарыть, с данными функциями не сталкивался ранее. Может, сможете помочь, получить текст окна на примере cmd.exe?

new-sl
26.10.2009, 15:04
кто может подсказать как в java превратит знак нампример + в целое число int ?

Irdis
26.10.2009, 15:07
1) java другая тема
2) возьмёт ascii код

[n]-c0der
26.10.2009, 15:07
кто может подсказать как в java превратит знак нампример + в целое число int ?
Помоему ты нехренова ошибся топиком.

new-sl
26.10.2009, 15:13
-c0der']Помоему ты нехренова ошибся топиком.
:)

Ra$cal
26.10.2009, 15:27
ща попробую, пока не рубануло в сон.

draliokero
26.10.2009, 15:30
Ra$cal, буду очень благодарен! Нечего по этому поводу не нашел, пришлось еще на rohitab.com тему поднять)

Ra$cal
26.10.2009, 15:50
#define _WIN32_WINNT 0x0610
#include <iostream>
#include <Windows.h>
#include <math.h>
using namespace std;

int main()
{
FreeConsole();
if(!AttachConsole(7696))
cout << "cant attach to console\n";
else
cout << "test writing to console\n";


HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT srctReadRect;
srctReadRect.Top = 0; // top left: row 0, col 0
srctReadRect.Left = 0;
srctReadRect.Bottom = 1; // bot. right: row 1, col 79
srctReadRect.Right = 79;

// The temporary buffer size is 2 rows x 80 columns.

COORD coordBufSize, coordBufCoord;
coordBufSize.Y = 2;
coordBufSize.X = 80;

// The top left destination cell of the temporary buffer is
// row 0, col 0.

coordBufCoord.X = 0;
coordBufCoord.Y = 0;

// Copy the block from the screen buffer to the temp. buffer.
CHAR_INFO chiBuffer[160]; // [2][80];
BOOL fSuccess;

fSuccess = ReadConsoleOutput(
hStdout, // screen buffer to read from
chiBuffer, // buffer to copy into
coordBufSize, // col-row size of chiBuffer
coordBufCoord, // top left dest. cell in chiBuffer
&srctReadRect); // screen buffer source rectangle

FreeConsole();


system("pause");
}

просто прочитать в массив. причем читать только видимую часть. там есть апи для вычисления области, в которой есть текст. ну и нада сервисные функции начирикать чтобы матрицу символов перегнать в обычную строку. надеюсь осилишь?
Да, pid процесса вручную вбит. Подставляй свой.

Вообще мсдн решает, просто нада ковыряться не только в одной статье =) Правда тут хватило одной и одного примера к ней.

draliokero
26.10.2009, 15:53
Ra$cal, аа чувак спасибо большое, да осилю)

StriplOol
27.10.2009, 16:25
винсок (ws2_32) и почитай какой нибудь учебник по С/С++

Спасибо понял что не так, пролинковал примеры работают. Ещё раз спасибо.

Chrek625
27.10.2009, 19:22
Доброго времени суток.
Подскажите пожалуйста как лучше организовать сортировку из файла,то есть к примеру загружается список авторов и их произведений, как сделать так чтобы Указав к примеру автора из заданного файла вывелись только строки с этим автором.
Организовать это нужно на Си, не откажусь от любой помощи или подсказки...
Заранее спасибо

new-sl
27.10.2009, 20:25
знаю нетот топик но там неотвичают тут бистреи :)
подскажытем мине пожалуиста такую функцыю как в с++ cin.putback();
if(isalpha(ch)) {
cin.putback(ch);
cin>>string_value;
return curr_tok=NAME;

Chrek625
28.10.2009, 20:15
Неужели ни кто не может помочь решить проблему???
Сори за флуд

Lee_fx
28.10.2009, 20:23
Стандартным методом - грузи файл в оперативу и сортируй как душе угодно.

Chrek625
28.10.2009, 20:33
А можно пример?

-m0rgan-
29.10.2009, 20:23
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR CmdLine, int CmdShow)
{
char szAppName[] = "HelloWin!";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (BRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lszMenuName = NULL;
wndclass.lpzClassName = szAppName;
RegisterClassEx(&wndclass);

return 0;
}


Компелятор ругаецо:


c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(19) : error C2065: 'BRUSH' : undeclared identifier
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(19) : error C2146: syntax error : missing ';' before identifier 'GetStockObject'
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(20) : error C2039: 'lszMenuName' : is not a member of 'tagWNDCLASSEXW'
c:\program files\microsoft sdks\windows\v6.0a\include\winuser.h(1537) : see declaration of 'tagWNDCLASSEXW'
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(21) : error C2039: 'lpzClassName' : is not a member of 'tagWNDCLASSEXW'
c:\program files\microsoft sdks\windows\v6.0a\include\winuser.h(1537) : see declaration of 'tagWNDCLASSEXW'

Я переписал все один в один с книги.
В чем проблема?
Компелю в VS 2008

growl
29.10.2009, 20:35
А можно пример?
http://en.allexperts.com/q/C-1040/2009/8/Sorting-sequential-file.htm

-m0rgan-
Инклуды точно все?

-m0rgan-
29.10.2009, 20:53
точно

growl
29.10.2009, 21:16
-m0rgan-
Тогда не один в один
lszMenuName -> lpszMenuName
lpzClassName -> lpszClassName

wndclass.hbrBackground = (BRUSH) GetStockObject(WHITE_BRUSH); // эта строка вообще не понятно что, может между (BRUSH) GetStockObject(WHITE_BRUSH) ними плюс нужен?
браш нигде не определён.

-m0rgan-
29.10.2009, 21:19
Из windows.h
typedef struct tagWNDCLASSEX
{
UINT sbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClasExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
HICON nIconSm;
}
WNDCLASSEX;

Мб єто прояснит ситуацию..

rudvil
29.10.2009, 21:26
Из windows.h
typedef struct tagWNDCLASSEX
{
UINT sbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClasExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
HICON nIconSm;
}
WNDCLASSEX;

Мб єто прояснит ситуацию..

Ну так и используй "HBRUSH", а не "BRUSH"...

-m0rgan-
29.10.2009, 21:27
http://img2.imageshack.us/img2/2353/cppx.png

И все такое..

rudvil
29.10.2009, 21:35
И все такое..
помоему это не весь код.

-m0rgan-
29.10.2009, 21:39
не весь, но это класс окна..
Весь вот:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(iMsg)
{
case WM_CREATE:
PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rect);

DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

EndPaint(hwnd, &ps);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

rudvil
29.10.2009, 21:42
Закоментировав PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC); все скомпилилось без ошибок.

-m0rgan-
29.10.2009, 21:52
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'

строка 22: wndclass.lpszClassName = szAppName;

Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?

почему в остальных средах разработки все ок ???

rudvil
29.10.2009, 21:58
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'

строка 22: wndclass.lpszClassName = szAppName;

Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?

почему в остальных средах разработки все ок ???

У меня VS10 beta2...
Не понятно ещё почему у тебя "LPCWSTR", у меня там "LPCSTR".
Какая у тебя винда?

GenTao
29.10.2009, 22:01
Всем привет.Необходимо выполнять цикл do while до тех пор,пока не введена строка.Как это реализовать на си ? Че ток не переделал - не работает.

-m0rgan-
29.10.2009, 22:06
У меня VS10 beta2...
Не понятно ещё почему у тебя "LPCWSTR", у меня там "LPCSTR".
Какая у тебя винда?

XP SP3

rudvil
29.10.2009, 22:09
Попробуй такwndclass.lpszClassName = (LPCWSTR) szAppName;

-m0rgan-
29.10.2009, 22:25
rudvil, теперь ошибку линковки выкидует =\\
Linking...
api.obj : error LNK2019: unresolved external symbol "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) referenced in function _WinMain@16
C:\Documents and Settings\***\Мои документы\Visual Studio 2008\Projects\system\Debug\system.exe : fatal error LNK1120: 1 unresolved externals

Lee_fx
29.10.2009, 22:42
static char szAppName[] = "HelloWin";
меняй на
static wchar_t szAppName[] = L"HelloWin";

и везде где "..." ставь префикс L"..."
Юникод используется

Ra$cal
29.10.2009, 22:50
если по книге делает, то лучге в проекте отрубить юникод, в свойствах. чтобы поберечь нервы. ибо устанет баги исправлять. В настройках проекта во вкладке General параметр charset щадай Not set.
По поводу последней ошибки - проверяй имена и типы. Может чтото поправил, а еще лучше вставь код сюда, который у тебя сейчас.

-m0rgan-
29.10.2009, 22:55
а еще лучше вставь код сюда, который у тебя сейчас.

Вот:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static wchar_t szAppName[] = L"HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);
return 0;
}

Ra$cal
29.10.2009, 23:00
если это весь код, то ты потерял код WndProc. в начале у тебя объявление, но самого тела функции нет

-m0rgan-
30.10.2009, 01:13
Я уже как то задавал этот вопрос, но не получил на него ответа :(

КАК ПРИКРУТИТЬ К MICROSOFT VISUAL С++ 2008 ИНТЕЛОВСКИЙ КОМПИЛЯТОР???

ОЧЕНЬ ИНТЕРЕСУЕТ!!!

growl
30.10.2009, 02:27
Документация говорит такое
If you are using Visual Studio 2005/2008 Standard Edition, no configuration is needed to build
Intel® 64 architecture applications. For other editions:
1. From Control Panel > Add or Remove Programs, select “Microsoft Visual Studio 2005”
(or 2008) > Change/Remove. The Visual Studio Maintenance Mode window will appear.
Click Next.
2. Click Add or Remove Features
3. Under “Select features to install”, expand Language Tools > Visual C++
4. If the box “X64 Compiler and Tools” is not checked, check it, then click Update. If the
box is already checked, click Cancel.
To use Microsoft Visual Studio 2005/2008 Team System Edition to build applications to run on
IA-64 architecture systems, follow the above steps and ensure that the box “Itanium Compiler
and Tools” is checked.
должно быть для 32 битки поддержка нативна

-m0rgan-
30.10.2009, 02:37
2growl, спс

и еще вопрос:
ничего что я вин апи учу по книге Ч. Петзольд "Программирование для Windows 95
Она просто по вин апи для С а не для С++

growl
30.10.2009, 02:59
и еще вопрос:
ничего что я вин апи учу по книге Ч. Петзольд "Программирование для Windows 95
Она просто по вин апи для С а не для С++
возьми Рихтера, если надо новое, а так апи сишной от си ++ не отличается, это ж системные штуки

-m0rgan-
30.10.2009, 03:03
возьми Рихтера
какое название книги?

sNt
30.10.2009, 03:39
Помогите, пожалуйста. Как компилить в Visual C++ 2005 EE? Все кнопочки компиляции горят серым цветом... Скрин (http://dfsd-ru.1gb.ru/1.jpg)

Ra$cal
30.10.2009, 03:40
сначала создай проект в солюшене, потом в проекте создай cpp файл, и там уже пиши код и компилируй.

sNt
30.10.2009, 03:47
спс

Ins3t
30.10.2009, 03:54
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'

строка 22: wndclass.lpszClassName = szAppName;

Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?

почему в остальных средах разработки все ок ???

В самом начале напиши:
#undef UNICODE
И не надо никаких приставок.

sNt
30.10.2009, 16:37
Где находится фишка по созданию вин форм? Где-то видел, но не помню хде... Скрин (http://dfsd-ru.1gb.ru/1.jpg)

Irdis
30.10.2009, 16:47
вин форм в другой теме.
Это не с++

growl
30.10.2009, 16:53
возьми Рихтера
какое название книги?
Джеффри Рихтер
Windows для профессионалов.
Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows

sNt
30.10.2009, 18:33
вин форм в другой теме.
Это не с++

В какой? Ничего про интерфейсы я не нашел

Ins3t
30.10.2009, 18:38
Где находится фишка по созданию вин форм? Где-то видел, но не помню хде... Скрин (http://dfsd-ru.1gb.ru/1.jpg)


Project -> Add -> Add New Item -> UI -> Windows Form

Это по VC++ 2008, как у тебя в 2005 хз, но ищи подобное.

sNt
30.10.2009, 18:46
thx

Perprofan
30.10.2009, 22:25
Пытаюсь начать учить ( уже в цитаты ) с++,

Код по тутору:

#include <iostream.h>

int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}

В Code::Blocks хорошо все, консолья программа исполняется.
Пытаюсь сделать в визуал с++ выходит...ничего не выходит.

Последовательность такова:
1)Создаю в нем новый проект вин 32, консольную
2)в нем новый файл с++
3) в нем пишу код, контро + ф5, выдает разные не понятные ероры!


1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
1>ohlol.cpp
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(1) : warning C4627: #include <iostream.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(12) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\ohlol\ohlol\Debug\BuildLog.htm"
1>ohlol - ошибок 1, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Вопросы:
1) Что я не так сделал?
2) Как правильно?
3) Почему в в блоках код работал а тут нет?

ASQX
30.10.2009, 22:33
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}

так будет в визуал с++..

Perprofan
30.10.2009, 22:36
C этим кодом тоже самое....

1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
1>ohlol.cpp
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(1) : warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(12) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\ohlol\ohlol\Debug\BuildLog.htm"
1>ohlol - ошибок 1, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

ASQX
30.10.2009, 22:38
C этим кодом тоже самое....

при создание проекта галку перед Empty project ставил?

sNt
30.10.2009, 22:39
Где можно узреть манул по созданию вынь форм? Поиск особо результата не приносит, всякая мура вылезает. Хотелось бы поподробнее, а там "как создать кнопку и как её нажать". Про то, как оперировать - ничего не сказано. Заранее благодарен...

Perprofan
30.10.2009, 22:43
http://s57.radikal.ru/i157/0910/6d/d6c17bcf8cae.jpg

А где галка то?)

ASQX
30.10.2009, 22:52
http://img7.imageshost.ru/imgs/091030/cd581950c1/t038d4.png (http://imageshost.ru/links/f8f843e713b5b1587fb60bbdb23da84e)

Perprofan
30.10.2009, 23:06
Теперь что то новое...создаю пустым.


1>------ Построение начато: проект: Blion, Конфигурация: Debug Win32 ------
1>Внедрение манифеста...
1>.\Debug\Blion.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\Blion\Blion\Debug\BuildLog.htm"
1>Blion - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Большой джо
31.10.2009, 01:28
Как в C++ подключить .dll файл?)

growl
31.10.2009, 03:04
ответы для упражнений из книги Страуструпа у кого-нибудь есть?

Perprofan
31.10.2009, 11:03
Теперь что то новое...создаю пустым.


1>------ Построение начато: проект: Blion, Конфигурация: Debug Win32 ------
1>Внедрение манифеста...
1>.\Debug\Blion.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\Blion\Blion\Debug\BuildLog.htm"
1>Blion - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}


Что не так?

оlbaneс
31.10.2009, 11:15
C этим кодом тоже самое....

1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.

вот так будет работать

#include "stdafx.h"
#include <iostream>

using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
cin >> y; // насладись консолью -)
return 0;
}


// #include "stdafx.h"
#include <iostream> это обязательные заголовки

Perprofan
31.10.2009, 12:21
http://s16.radikal.ru/i191/0910/51/3035972166d6.jpg
АРРР
Что опять не так

razb
31.10.2009, 12:48
2Perprofan

сделай полный clean проекта и отключи precompiled headers в настройках проекта.

Perprofan
31.10.2009, 13:47
Я не нашел где это, можно пруфлинк?

оlbaneс
31.10.2009, 14:57
и в коде убери слешы // #include "stdafx.h"

Fata1ex
31.10.2009, 15:16
"пруфлинк" - .... ты сначала посмотри, что значит слово, а потом употребляй.
файл - создать проект - win32 - консольное приложение - пустой проект +, предварительно скомпилированнные заголовки -. готово.

Perprofan
31.10.2009, 15:42
Если убирать заголовки но не ставить галочку на пустом проэкте то все работает.
Спасибо.

_nic
01.11.2009, 00:43
Создаю потоки в цикле,их надо как "усыпить" на время.Но я к сожалению столкнулся с проблемой ,если юзать SuspendThreadв цикле то из этого цикла почему то выйти нельзя :( Почему? И как это обойти?

Ra$cal
01.11.2009, 01:18
потому что вызвыать resumethread можно только из активного потока, потому как сонный ничего не может делать(правда логично?).

чтото из твоих вопросов вырисовывается чудовищная архитектура сетевого приложения. попробуй прочитать статьи на codeproject'e или у каких нить русских сайтов. на васме том же основы по сокетам.

VIP
01.11.2009, 17:09
Здравствуйте! Возник следующий вопрос:

Имеется массив vector<int> elements, есть число в переменной int del_element. Необходимо найти в elements элемент со значением del_element и если он есть, то удалить его из elements.

Так как по вектору ходят с помощью итераторов, то как мне его сравнить с int?

Irdis
01.11.2009, 17:18
если не ошибаюсь так
std::vector<int>::iterator channelIter = intVector.begin()
std::cout<< (int)(*channelIter);

VIP
01.11.2009, 17:33
если не ошибаюсь так
std::vector<int>::iterator channelIter = intVector.begin()
cout<< (int)(*channelIter);

Да, скомпилилась, но при работе вылетает с ошибкой.

На всякий случай, вот вся функция:


void del(){
int del_element;
system("cls");
printf("Enter del elemet:\n");
scanf_s("%d", &del_element);
for(vector<int>::iterator i = elements.begin(); i != elements.end(); i++){
if((int)(*i) == del_element){
elements.erase(i);
}
}

Методом поочерёдного исключения строк выяснил, что ошибку при выполнении вызывает строка:
elements.erase(i);

Ra$cal
01.11.2009, 17:46
#include <iostream>
#include <vector>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <functional>
#include <algorithm>

using namespace std;

int main()
{
vector<int> elements;

elements.push_back(1);
elements.push_back(2);
elements.push_back(3);
elements.push_back(4);
elements.push_back(5);

int del_element = 3;

cout << "before remove:";
BOOST_FOREACH(int val, elements) cout << " " << val;

vector <int>::iterator new_end = remove_if(elements.begin(), elements.end(),
boost::bind(std::equal_to<int>(), _1, del_element));
elements.erase (new_end, elements.end( ) );

cout << "\nafter remove: ";
BOOST_FOREACH(int val, elements) cout << " " << val;

cout << '\n';

system("pause");
}

вариант удаления юзая boost и stl(без циклов, описанных вручную, что имхо гораздо нагляднее и быстрее понимается).

Irdis
01.11.2009, 17:49
нет с erase должно быть всё ок
ошибку в студию

Ra$cal
01.11.2009, 17:54
с вектором кстати проще работать не через иетарторы, а через оператор [], как с обычным массивом.
for(int i = 0; i < elements.size(); i++){
if(elements[i] == del_element){
elements.erase(elements.begin() + i);
// важный момент. из-за удаления пропускаем одну запись, если не править i
i--;
}
}

VIP
01.11.2009, 17:57
нет с erase должно быть всё ок
ошибку в студию

извиняюсь за принт-скрин, но думаю так будет точнее:

http://img-fotki.yandex.ru/get/4002/tltshnik.0/0_1935d_45e25620_L.jpg

Ra$cal
01.11.2009, 18:11
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.

VIP
01.11.2009, 18:14
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.

Хорошо, спасибо за помощь и за подсказку! Учту. :)

Irdis
01.11.2009, 18:14
вотъ... а break делать не надо, если два одинаковых элемента то он удалит только первый
vector<int>::iterator i = a.begin();
while( i!=a.end())
{
if((int)(*i) == del_element)
i=a.erase(i);
else
i++;

};

VIP
01.11.2009, 18:22
вотъ... а break делать не надо, если два одинаковых элемента то он удалит только первый
vector<int>::iterator i = a.begin();
while( i!=a.end())
{
if((int)(*i) == del_element)
i=a.erase(i);
else
i++;

};

OK. То есть как я понял VectorName.erase(IteratorName) возвращает итератор на следующий за удалённым элемент?

Irdis
01.11.2009, 18:26
Да... именно так,
а если удаляем последний элемент, то возвращается на конец

VIP
01.11.2009, 18:28
Да... именно так,
а если удаляем последний элемент, то возвращается на конец

Спасибо большое за помощь! :)

Si{R}ius
02.11.2009, 23:10
Доброго времени суток, требуется помощь в написании кодировщика текста на Delphi (или Паскале).

Программа должна зашифровывать текстовый файл путем сдвига символов по таблице ASCII или xor`om при использовании пароля. Также нужно написать программу-брут, которая будет подбирать пароль, подходящий для расшифровки. В тексте имеется ключевое слово (4 символа), а пароль должен быть 1-6 символов.
Решил задачу при пароле в 4 знака, но как расшифровать текст с пассом, который длинее ключа, ума не приложу

Заранее благодарю за помощь.

Chrek625
03.11.2009, 04:06
Доброго времени суток.
Подскажите функции и библиотеки для работы с rdp протоколом.

Irdis
03.11.2009, 04:44
Chrek625
смотри в эту сторону
http://stackoverflow.com/questions/1200210/rdp-communication-via-c-c
Si{R}ius
смотри на название темы в которой постишь :mad: :mad:

Si{R}ius
03.11.2009, 11:41
Si{R}ius
смотри на название темы в которой постишь :mad: :mad:
Пардон, промахнулся :)

-m0rgan-
03.11.2009, 16:45
Добрый день!
Есть вопрос.
Создаю консольное прилодение.
Как прописать заголовок окна?
Вот например запускаешь прогу, и слева от крестика пишется название,а у меня путь к запущеному файлу, а я хочу чтоб как в ФАРЕ, писало ФАР, а не путь.
И как иконку прицепить консольному приложению.
Пишу в VC++ 2008

Зарание благодарен.

Lee_fx
03.11.2009, 16:58
system("TITLE NAME");

-m0rgan-
03.11.2009, 17:07
неа, не работает.

slesh
03.11.2009, 17:15
2 Lee_fx зачем так извращаться? Если есть обычная апишка которая это делает
SetConsoleTitle("title of windows");

-m0rgan-
03.11.2009, 17:17
слеш, благодарю!
И еще вопрос.
мне нужно получить текущую директорию.
юзаю GetCurrentDirectory()
но она возвращает диру вида C:\dd\dd\dd\
а мне нужно C:\\dd\\dd\\dd\\ (для фопена)
как такое получить?

Irdis
03.11.2009, 17:23
-m0rgan-
не думай просто вставь эту строку =)

slesh
03.11.2009, 17:23
Вообще \\ это сишная запись символа \
т.е. сишная запись C:\\dir\\ после компила превратится в C:\dir\ это всеголишь экранирование слеша. А вот винда хавает разделитель \ хотя и против \\ ничего не имеет.
Ну а если нужно всётаки иметь формат \\ то просто пробегайся по всем элементам и копируй из во второй буфер, а если встретится \ то 2 раза повторяй его

Kaimi
03.11.2009, 17:23
А зачем получать текущую директорию? Если предполагается, что файл лежит в папке с программой, то можно просто имя файла указать вроде...

-m0rgan-
03.11.2009, 17:29
не думай просто вставь эту строку =)
Если сделать:
char buff[256];
FILE * open = fopen(dir,"r")
while(fgets(buff,255,open))
{
printf(buff);
}

программа не конпелится, и вылетает.

Ну а если нужно всётаки иметь формат \\ то просто пробегайся по всем элементам и копируй из во второй буфер, а если встретится \ то 2 раза повторяй его
можна примерчик?)

А зачем получать текущую директорию? Если предполагается, что файл лежит в папке с программой, то можно просто имя файла указать вроде...

char buff[256];
FILE * open = fopen("file.txt","r")
while(fgets(buff,255,open))
{
printf(buff);
}

программа вылетает и не конпелицо.

Kaimi
03.11.2009, 17:33
А разве printf не предполагает наличие формата первым аргументом?

-m0rgan-
03.11.2009, 17:34
printf("%s",buff);
такая же фигня

slesh
03.11.2009, 17:40
char buff[256];
FILE * f;

GetCurrentDirectory(256, buff);
strcat(buff, "\\file.txt");

f = fopen(buff,"r");
if (f)
{
while(fgets(buff,255,f))
{
printf("%s\n",buff);
}
fclose(f);
}

_antony
03.11.2009, 17:51
программа вылетает и не конпелицо.
:D

-m0rgan-
03.11.2009, 17:59
slesh, спс.
И последний вопрс (гна єти два часа))))
Хочу защитится от переполнения буффера.
юзаю фгетс:

int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}


но из за этого строка не преобразовуеться в нижый регистер.
как быть?

-m0rgan-
03.11.2009, 18:05
:D

Что смешного?
пограмма вылетала в файл dbghook.c указывая на строку _debugger_hook_dummy = 0;

slesh
03.11.2009, 18:28
я вот юзаю самописную функцию для перевода буфера в нижний регистр. Понимает ткоа англ буквы

void my_LowCase(char * buf)
{
while (buf[0])
{
if (buf[0]>='A' && buf[0]<='Z')
{
buf[0] += 32;

}
buf++;
}

return;
}




2 -m0rgan- оформляй код в теги [ CODE ]

-m0rgan-
03.11.2009, 18:33
2slesh я почти тоже:


char * LowerCase(const char * Command)
{
int num = 0;
char* buffer = (char *)malloc(strlen(Command) + 1);
while (Command[num] != '\0')
{
buffer[num] = tolower(Command[num]);
num++;
}
buffer[num] = '\0';
return (buffer);
}


Но суть не меняеться:

int main ()
{
char buf[154];
gets(buf);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}


пашет ок, а:

int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}


не приобразовует.

slesh
03.11.2009, 18:46
ты не забывай что gets возврает строку и вконце неё идет еще \n

-m0rgan-
03.11.2009, 22:06
я могу добавить \n


int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
strcat(buf,"\n");
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}


тот же результат.

slesh
03.11.2009, 22:35
не там добавляеш. после help надо

-m0rgan-
03.11.2009, 23:22
2slesh - спс!

люля
04.11.2009, 12:07
Доброе утро всем))
скажите пожалуйста, когда borland c++ 3.1 компилирует, он что использует 32 разрядный код??
просто у меня работает среда, но у меня windows sp2, а у друга у него sp3 и ему пишет ошибку:
16 разрядная подсистема ms-dos
Процессор NTVDM обнаружил недопустимую инструкцию

может ли это быть из за того что у него пак 3?

razb
04.11.2009, 12:33
хватит уже использовать древние компиляторы!

Kaimi
04.11.2009, 13:14
хватит уже использовать древние компиляторы!

Скажи это преподавателям института/школы

slesh
04.11.2009, 13:57
вообще старые достовские проги лучше запускай в DosBox. Потому что виндовый эмулятор доса очень сильно глючит. Она на разных компах с одной и тойже виндой может выдавать ошибку )

-m0rgan-
05.11.2009, 16:09
Добрый день, подскажите, как переводить строку в С++, интересует ВИН АПИ.

char a[256] = "aaaa";
strcat(a,"\n");
...
DrawText(hdc,a,.........);


В итоге выводит не
ааа
а

а: ааа (ИЕРОГЛИФ) а

как тогда перевести строку?

slesh
06.11.2009, 10:18
а зачем ты делаеш strcat(a,"\n");?

St0nX
06.11.2009, 12:16
char a[256] = "aaaa";
a[lstrlen(a)+1] = 0x0a;
Не?Извращенство?)

masterBlack
06.11.2009, 16:15
Добрый день.
Как с помощю GetStockObject разместить на форме однооконного приложения картинку ?

Или вообще как картинку разместить?


КОД:



#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(iMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rect);

DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

EndPaint(hwnd, &ps);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

Ra$cal
06.11.2009, 16:21
BitBlt, StretchBlt, элемент управления Picture если задать ему через какое то из сообщений хэндл картинки для отображения.

masterBlack
06.11.2009, 16:24
а примерчик можно?

rudvil
06.11.2009, 18:22
Привет, у меня такая проблема, когда я пытаюсь создать деструктор класса, компилятор пишет что в тексте программы обнаружена тильда, и не компилит. Деструктор я обьявляю так же как конструктор, но ставлю перед именем тильду.В учебнике написано что так и надо. Тильда устарела чтоли? Про учебник вроде не самыый новый. Среда Codelocks, компилятор MinGW
код в студию... там и посмотрим на ошибку

masterBlack
06.11.2009, 19:03
а примерчик можно?
актуально

x-treem
07.11.2009, 00:37
ммм, больше 400 страниц, а поиск вроде бы ничего не дал. не подскажите как реализовать такую штуку:

программа при запуске должна проверять, не запущена ли она уже, и если так, то халт.

Kaimi
07.11.2009, 00:40
Например, получай список процессов и ищи свой экзешник в них

Fata1ex
07.11.2009, 00:47
Так же как вариант что-нибудь изменять в системе ( пусть даже это будет создание файла ) при запуске экземпляра. При каждом запуске программы проверять наличие этого изменения в системе и делать соответствующие выводы

ps. почему я не могу сам себе поставить "+" :(

Ra$cal
07.11.2009, 01:16
для этого придуманы мьютексы и апи CreateMutex

masterBlack
07.11.2009, 01:21
как в GetStoskObject() прописать КРАСНЫЙ цвет?
его нету среди констант =\

Fata1ex
07.11.2009, 01:29
для этого придуманы мьютексы и апи CreateMutex
дада ) я про это даже писал как-то статью. она сейчас странице на 5ой, наверно, уже :D
во (http://forum.antichat.ru/thread127262.html)
не. пока на 4ой :)
немного, но есть про синхронизацию. может поможет

Дикс
07.11.2009, 08:44
как в gdb (эклипс, mingw) пройти строку с "cin"?
жму F6, построчно дохожу до "cin >> var" и все. внизу в консоли тишина. причем не выводится текст, который должен был быть выведен.

а если ввести и нажать ентер, пишет -

515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}

код


string url = "";
cout << "url: ";
cin >> url;

razb
07.11.2009, 13:21
Вообще то когда ты доходишь до cin ожидаеться консольный ввод.

rudvil
07.11.2009, 13:58
как в gdb (эклипс, mingw) пройти строку с "cin"?
жму F6, построчно дохожу до "cin >> var" и все. внизу в консоли тишина. причем не выводится текст, который должен был быть выведен.

а если ввести и нажать ентер, пишет -

515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}

код


string url = "";
cout << "url: ";
cin >> url;

если нужно вывести введенный пользователем текстstring url = "";
cin >> url; // загоняем в переменную введенный текст
cout << "url: " << url; // и выводим его

Besi
07.11.2009, 15:38
string url = "";
cin >> url;
cout << "url: "<<url;
cout<<endl;
system("PAUSE");
вобщето так )

Дикс
07.11.2009, 16:44
блин, вы о чем?
я знаю как вводить-выводить

но вот нажал я в эклипсе F11, запустил gdb
в нём жму F6 - построчно
и дохожу до строки "cin >> ..."
и все

дальше если ввести текст внизу в консоли, ошибка

515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}

Besi
08.11.2009, 14:45
рабочий код принимает значение которое ты введёш с клавы
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int main ()
{

string s1 ;
cin>>s1;
cout << "url is: " << s1 << endl;
system("PAUSE");

return 0;
}

Дикс
08.11.2009, 18:59
я понимаю, только почему он не переходит после ввода на следующую строку и там не останавливается? это же в дебаггере

и ещё вопрос - как в чистом С++ использовать что-то типа preg_match?
чтобы вытаскивать текст из строки по регулярному выражению

или что надо минимально подключить к проекту?

Дикс
08.11.2009, 19:26
за неимением регулярных выражений, придумал такой изврат:


string extract(string base, string from, string to)
{
string piece = base.substr(base.find(from) + from.length());
return piece.substr(0, piece.find(to));
}

string pregtest = "id='s' value='bbfd2b08c8caff410f4c2c655bd4b110e6f71e10f85 0a290d76d3950' />";
string s = extract(pregtest, "s' value='", "'");

razb
08.11.2009, 19:35
2Дикс
Можешь юзать бустовые регулярки.
В 09 стандарте, регулярки должны будут включить в стандартную библиотеку =\

Drakon
08.11.2009, 23:04
такой вопрос: при использовании gets() процедура ввода в базу пропускает ввод name и сразу выдает famil , т.е. результат такой
name:
famil:
и дальше требует ввести только famil и phone. если перед gets(name) ввести еще gets, то тоже пропустит его т.е. пропуcкает первый gets.

#include <cstdio> включено, vv присвоено 0.
char name [100][100];
char famil [100][100];
char phone [100][100]; - объявлено вне ф-ий

если использовать cin>> то работает

процедура:

void vvesti()
{
bool f;
int t,j,l;

cout<<"\nchto vvesti?? 1 - v bazy 2 - matrix\n";
cin>>l;
if (l==1)
do {

cout<<"\nname: ";
gets(name[vv]);
cout<<"\n";
cout<<"famil: ";
getsfamil[vv]);
cout<<"\n";
cout<<"phone: ";
gets(phone[vv]);
cout<<"\n";
vv++;

cout<<"\n ecsho??..... da -- 1 net -- 0\n";
cin>>f;
cout<<"\n";

} while (f!=0); else if (l==2)
{cout<<"matrix: ".........итд} ...........
}

Fata1ex
08.11.2009, 23:26
чем не угодил cin и string? ты или уже пиши на С или на С++. а то юзаешь объекты из С++, но имена - массив символов. буэ



cout << "Enter something" << endl;
gets(carr1[i]);
cout << "One more time" << endl;
gets(carr2[i]);



у меня работает
upd: вообще у меня по-всякому работает. я хз, что там у тебя не так :)


cout<<"\n";
cout<<"famil: ";


...


if (l==1)
do {


оО


не жести так ) и лучше выборку реализуй case'ом, будет нагляднее да и удобнее потом.

gisTy
09.11.2009, 04:38
string url = "";
cin >> url;
cout << "url: "<<url;
cout<<endl;
system("PAUSE");
вобщето так )
bash: PAUSE: команда не найдена
лучше getchar();

Besi
09.11.2009, 11:07
можно и гет чаром) там без разгици но я ету юзаю)

rudvil
09.11.2009, 14:14
можно и гет чаром) там без разгици но я ету юзаю)
system("PAUSE")работает только под виндой.
Лучше использоватьcin.get();

~NeiTRoN~
09.11.2009, 15:36
Всем привет. Возникла проблема, помогите кто может
Вот есть часть кода:

HDC hDC;// основная поверхность для рисования

/*Инициализация картинок*/
HBITMAP hBitmap;
hDC=GetDC(hWnd);
hназваниеDC=CreateCompatibleDC(hDC);
hBitmap=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_ азвание));
SelectObject(hvozdDC,hBitmap);
DeleteObject(hBitmap);

Ну и наконец рисую то что попалось в матрице
case 0:
BitBlt hDC,x*weight,y*height,weight,height,hкартин аDC,0,0,SRCCOPY);
break;


А сама проблема в том что все это может вставить картинки только bmp и с ограниченым количеством бит.
А на что нужно заменить код чтоб можно было вставить картинки формата png?
Помогите плиз!!!

Ra$cal
09.11.2009, 16:46
http://msdn.microsoft.com/en-us/library/ms536316%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms533815%28VS.85%29.aspx

Кароч кури маны по GDI+ Там все достаточно просто и удобно

~NeiTRoN~
09.11.2009, 17:08
http://msdn.microsoft.com/en-us/library/ms536316%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms533815%28VS.85%29.aspx

Кароч кури маны по GDI+ Там все достаточно просто и удобно
А можешь подсказать что-нибудь на русском и желательно чтонибудь попроще для понимания

Ra$cal
09.11.2009, 17:34
чего уж проще то?

Graphics graphics(GetDC(hWnd));
Image img(L"C:\\test.png");
graphics.DrawImage(&img, 5, 5);

Выучить технический английский для чтения доков гораздо быстрее, чем ждать переводов залетных, поверь. Тем более доки очень редко переводят.

[ADDED]
http://msdn.microsoft.com/en-us/library/ms536339%28VS.85%29.aspx
тут описывается изменение логики кодирования с апи на gdi+. Тупо на глаз понятно что к чему. Хз какие еще доки найти понятнее.

_nic
09.11.2009, 18:50
Можно каким то извратным методом заставить поток саспендить самого себя, или это вообще технически невозможно?

~NeiTRoN~
09.11.2009, 19:14
чего уж проще то?

Graphics graphics(GetDC(hWnd));
Image img(L"C:\\test.png");
graphics.DrawImage(&img, 5, 5);

Выучить технический английский для чтения доков гораздо быстрее, чем ждать переводов залетных, поверь. Тем более доки очень редко переводят.

[ADDED]
http://msdn.microsoft.com/en-us/library/ms536339%28VS.85%29.aspx
тут описывается изменение логики кодирования с апи на gdi+. Тупо на глаз понятно что к чему. Хз какие еще доки найти понятнее.

Большое пасибо!!! Единственное последний вопрос: Почему когда я вышеописанным способом включаю кртинку, она не прозрачна?(тоесть я создаю прозрачный png прямоугольник,а он отображается белым)

Patrik
10.11.2009, 03:57
Большое пасибо!!! Единственное последний вопрос: Почему когда я вышеописанным способом включаю кртинку, она не прозрачна?(тоесть я создаю прозрачный png прямоугольник,а он отображается белым)
Возможно, это поможет... http://msdn.microsoft.com/ru-ru/library/ms172507.aspx

Drakon
10.11.2009, 17:35
чем не угодил cin и string? ты или уже пиши на С или на С++. а то юзаешь объекты из С++, но имена - массив символов. буэ



cout << "Enter something" << endl;
gets(carr1[i]);
cout << "One more time" << endl;
gets(carr2[i]);



у меня работает
upd: вообще у меня по-всякому работает. я хз, что там у тебя не так :)


cout<<"\n";
cout<<"famil: ";


...


if (l==1)
do {


оО


не жести так ) и лучше выборку реализуй case'ом, будет нагляднее да и удобнее потом.

т.е. не меняя ничего все работает??

string ... ? наверное я до этого не изучил еще. пока в курсе что строки как char-массивы вбиваются

/да case это так и надо , просто потом добавил варианты, переписывать неохота/

winflip
10.11.2009, 17:42
Как объявить двух и трёхмерный динамический массив(используя операцию new)? Например, одномерный массив
int * a = new int[10];

Fata1ex
10.11.2009, 17:44
т.е. не меняя ничего все работает??

я написал, как работает у меня :)

Fata1ex
10.11.2009, 17:48
Как объявить двух и трёхмерный динамический массив(используя операцию new)? Например, одномерный массив
int * a = new int[10];

2x

int** arr = new int[Rows];
for (int i = 0; i < Rows; i++) {
arr[i] = new int[Columns];
}
3x

аналогично, только три цикла

winflip
10.11.2009, 18:12
Реализация алгоритма теста на простоту Миллера-Рабина. В чём ошибка.
#include <iostream>
#include <cmath>
int is_prime(int m){
using namespace std;
int r = 1000;
int t = m-1;
int s = 0;
bool b = true;
if(m%2==0){
return false;
}
if(m==1){
return false;
}
if(m==2){
return true;
}
while(t%2==0 || b){
b = false;
s++;
t=t/2;
}
for(int i=1;i<r+1;i++){
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
if((x==1)||(x==m-1)){
continue;
}
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
continue;
}
}
}
return true;
}
int main(){
using namespace std;
int a,b;
cin >> a >> b;
for(int i=a;i<b;i++){
if(is_prime(i)){
cout << i << " ";
}
}
cin >> a;
return 0;
}
P.S Алгоритм, с которого я писал есть на википедии, страница так и называется тест миллера-рабина

Fata1ex
10.11.2009, 18:14
что пишет компилятор?
int is_prime(int m)
попробуй сделать bool, а нет int

winflip
10.11.2009, 18:29
Разницы нет, компиляция проходит и программа работает, но неправильно, выводит 15(оно составное) и не выводит 17(простое), если a=3, а b=20.

Fata1ex
10.11.2009, 18:39
тогда с++ тут ни при чем - ошибка в алгоритме

winflip
10.11.2009, 19:06
Да это я и так понял, сам алгоритм правильный, но я неправильно его реализовал(немного). Просто не могу найти ошибки. Более подходящего места вопросу не нашёл)

Irdis
10.11.2009, 19:25
1)
Выбрать случайное a в диапазоне [2, m − 2]

а у вас [2,m-1]
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/
2) (*) вернуть составное
вернуть вероятно простое
а (*) у вас нет
3)
если x = m − 1 то перейти на следующую итерацию цикла А
а у вас на следующую итерацию цикла "для r = 1 .. s − 1"

winflip
10.11.2009, 20:18
Честно говоря, на счёт rand, я сделал, а вот2)
Цитата:
(*) вернуть составное
вернуть вероятно простое

а (*) у вас нет

Return false;
Это по-вашему что?
А 3 пункт я и вовсе не понял

Irdis
10.11.2009, 20:28
Return false;
это ошибка при компиляции XD
=======================
написав continue произойдёт следующее
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
continue;// попадаем в цикл for(int j=1;j<s;j++) а надо во внешний for(int i=1;i<r+1;i++){

}
return false;//что то я не видел, что бы это у вас стояло
}

winflip
10.11.2009, 20:37
Сори я щас вообще ничего не соображаю, а как во внешний цикл то попасть

Irdis
10.11.2009, 20:43
убрать continue и реализовать алгоритм без этого слова... это легко
ИМХО Вообще continue мне напоминает goto(в смысле, тем, что писать его плохо).

~NeiTRoN~
10.11.2009, 20:45
Сообственно необходимо реализовать полоску загрузки(ну на подобии как в различных играх). Реализовать надо на win api.
Вопрос: кто занает как это делается или где об этом можно почитать?

razb
11.11.2009, 00:59
гугли winapi progressbar, в инете полно примеров

Chrek625
11.11.2009, 02:54
Доброго времени суток.
Подскажите как средствами С++ реализовать "Выход из системы"?
Заранее благодарен

Fata1ex
11.11.2009, 03:03
google - "msdn shutdown"

http://msdn.microsoft.com/en-us/library/aa376871%28VS.85%29.aspx

gisTy
11.11.2009, 17:43
if(m%2==0){
return false;
}

...

if(m==2){
return true;
}мда
int m;
int t = m-1;
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
мда

winflip
11.11.2009, 18:07
Я по поводу теста простоты Миллера-Рабина(см. выше). Переписал с учётом замечаний, но по прежнему не работает
bool is_prime(int m){
using namespace std;
int r = 1000;
int t = m-1;
int s = 0;
bool b = true;
if(m==2){
return true;
}
if(m%2==0){
return false;
}
if(m==1){
return false;
}
while(t%2==0 || b){
b = false;
s++;
t=t/2;
}
for(int i=1;i<r+1;i++){
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
if((x==1)||(x==m-1)){
continue;
}
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
break;
}
return false;
}
}
return true;
}

gisTy
11.11.2009, 18:23
Я по поводу теста простоты Миллера-Рабина(см. выше). Переписал с учётом замечаний, но по прежнему не работает
...
приведи сам алгоритм, а не его реализацию. мне просто впадлу гуглить

ASM16d
11.11.2009, 19:44
Вопрос очень банальный, но все же прошу помощи:
есть массив символов
char buf[10000];
и есть функция, которая с этим массивом работает. Передавать массив нужно по ссылке. Делаю так:
int f ( char *buf[10000] )
{
*buf[0] = '1';
*buf [1] = '\0';
return 0;
}

дальше в программе вызываю
readPart( &buf );

Не работает. Что я делаю не так?