Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[
22]
Вопрос по visual studio 2008.
Возможно ли включить "счетчик" строк?
Чтоб видеть какая строка имеет какой номер?
А то не удобно искать ошибку в программе в 37 строк в ручную =))
два раза кликай по ошибке.
Решил С++ выучить. На первом уроке запара =(
Вот в чём дело:
В учебнике (World С++) написан пример первой проги
#include <iostream.h>
void main(){
cout<<"Hello!\n";
}
Но вместо предполагаемого досовского окошка с надписью Hello вылезает
c:\documents and settings\visual studio 2010\Projects\xzz\
Debug\xzz.exe"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Для продолжения нажмите любую клавишу . . .
В чём прикол?
Решил С++ выучить. На первом уроке запара =(
Вот в чём дело:
В учебнике (World С++) написан пример первой проги
#include <iostream.h>
void main(){
cout<<"Hello!\n";
}
Но вместо предполагаемого досовского окошка с надписью Hello вылезает
В чём прикол?Во первых так...#include <iostream>
int main(int argc, char* argv[]) {
std::cout << "Hello World!\n";
std::cin.get();
return 0;
}
а не легче?
#include <iostream>
using namespace std
int main(int argc, char* argv[])
{
cout << "Hello World"<<endl;
return 0;
}
а не легче?
#include <iostream>
using namespace std
int main(int argc, char* argv[])
{
cout << "Hello World"<<endl;
return 0;
}
Не было вопроса как "легче", был вопрос почему не работает, соответственно как должно быть правильно, а как легче и удобней человек пусть сам решает.
был вопрос почему не работает-2010 студия не работал с ней но думаю что она ещо сыровата
соответственно как должно быть правильно-ето самый лёгкий из вариантов как правильно
Беси, неймспейсы придумали для того, чтобы небыло конфликтов имен, а ты их в глобальные суешь. Разумеется, что в хэлло ворлд это роли не сыграет, но не стоет привыкать.
И сыроватой студия была во время первой бэты, сей час она отлично работает не смотря на то, что ресурсы жрет.
ни одна из этих не работает =\
ни одна из этих не работает =\
Попробуй создать "Empty project" и скомпилировать написанный мною выше код, если не пойдет - значит проблемы в студии, как вариант-переустановка студии.
BrainDeaD
07.05.2010, 14:53
попробуй создать пройект поновой и ничего не изменять кроме кода в main. может ты что-то стёр или изменил в дефолтном коде? или в названии файла ошибка вышла? короче пробуй.
Ins3t-ресурсы она жрёт нереально по етому и использую 2008
насчёт неймспейсов не спорю+не привыкаю))
zlo12-поидее у вас действительно тогда проблема в студии
если сново не запустится -скопируйте сюда ВЕСЬ код мейна
короче ладно, спасибо, но это всё шляпа, я так ничему не научусь и ничего не пойму. Буду ковыряться сам.
не работает походу из за того что не указал обязательный инклуд
#include "stdafx.h"
#include <iostream>
using namespace std
int main(int argc, char* argv[])
{
cout << "Hello World";
return 0;
оlbaneс перед написанием поста 5261 я об етом думал поетому и попросил весь код скопировать
не работает походу из за того что не указал обязательный инклуд
#include "stdafx.h"
#include <iostream>
using namespace std
int main(int argc, char* argv[])
{
cout << "Hello World";
return 0;
Заработало! Получаеццо, что stdafx.h надо вписывать постоянно, без разницы что за прога хочет увидеть свет?
конечно!))))
я так и думал что в етом бага(при создании проекта ты походу автоматом убирал всё что было и ставил код удаляя #include "stdafx.h" что и послужило ошибой)
за такую формулировку я буду гореть в аду.
не инклуд, а подключение библиотеки.
2беси в мэйне ты бы ничего не увидел и никто не увидел ;)
.::f-duck::.
08.05.2010, 15:48
iomanip - хедер манипуляторов.
Я так понимаю,он устарел?
Какой нынче в моде?
Что значит устарел?
Это стандартная библиотека С++, которая весьма не плохо выполняет свои функции.
очередная шляпа приключилась.
Вроде всё делаю по книге, но что-то не то.
Компилятор очень ругаеццо. Подскажите
#include "stdafx.h"
#include <iostream>
int main()
{
enum Days {Воскресенье, Понедельник, Вторник, Среда, Четверг, Пятница, Суббота};
int choice;
std::cout << "Выбери день (0-6): ";
std::cin << choice;
if (choice = Воскресенье || choice == Суббота)
std::cout << "\nВыходные\n";
else
std::cout << "\nБудни\n";
return 0;
}
zlo12, чё компилёр то говорит? и какой он? ))
upd:
std::cin << choice;
разве не так должно быть? -
std::cin >> choice;
upd2:
у меня работает в таком виде:
int main()
{
enum Days {Voskr, Pon, Vtor, Sre, Chet, Pt, Sub};
int choice;
std::cout << "Viberi den (0-6): ";
std::cin >> choice;
if ((choice == Voskr) || (choice == Sub))
std::cout << "\nVyh\n";
else
std::cout << "\nBudni\n";
return 0;
}
.::f-duck::.
09.05.2010, 13:04
Всюду писать std:: - не говнокод?
using namespace std;
И что делает ф-цтя getche(); (Зачем она нужна,пример)
yaneblinchik
09.05.2010, 14:22
Всюду писать std:: - не говнокод?
И что делает ф-цтя getche(); (Зачем она нужна,пример)
1 Говнокод,можно и по -другому выстроить код
2 Ждет пока введут что нибудь с клавиатуры
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int choice;
cout << "Entrer Day (0-6): ";
cin >> choice;
if(choise<7 && choise>=0)
{
if (choice == 5 || choice ==6)
cout << "Weekend"<<endl;;
else
cout << "Week-days"<<endl;
}
else
cout<<"Day Enter not correctly"<<endl;
return 0;
}
//должно работать нормально
немного сайтов
http://www.cyberguru.ru/cpp-sources/
http://www.msmfc.net/
http://www.sql.ru/Forum/actualtopics.aspx?bid=21
yaneblinchik
09.05.2010, 14:48
#include <iostream>
using namespace std;
int main()
{
enum Days {Voskr, Pon, Vtor, Sre, Chet, Pt, Sub};
int choice;
cout << "Enter Day (0-6): ";
cin >> choice;
if ((choice == Voskr) || (choice == Sub))
cout << "Vyh"<< endl;
else
cout << "Budni"<< endl;
return 0;
cin.get();
}
Возник вопрос по OpenGL :
Возможно ли с помощью Glaux сделать меню? Обычное или контекстное - неважно.
P.S. По графике темы на форуме не нашёл, поэтому запостил сюда, ибо пишу на плюсах
Всюду писать std:: - не говнокод?
И что делает ф-цтя getche(); (Зачем она нужна,пример)
Назови хотя бы одну причину, по которой применения пространства имен std к некому объекту является говнокодом.
А по поводу глобальных неймспейсов, по моему, уже не раз говорилось.
.::f-duck::.
09.05.2010, 21:56
Ins3t,нутк,понятно,если там пару надо вписать,а если строк 200. Это представляешь,сколько лишнего говна?
Ну да, разумеется нужно пихать неймспейсы в глобальные, чтобы избежать написания "std::", и плевать что может возникнуть конфликт имен.
Это можно делать в определенных случаях и весьма не обязательно.
А говнокодом можно назвать примерно следующее:
case UP : o > 0 ? o-- : o = FIELD_SIZE - 1; break;
А указывать пространство имен - это вполне нормально.
#include <iostream>
#include <map>
#include <string>
#include <utility>
int main(int argc, char* argv[]) {
std::map<std::string, std::pair<int, int> > files;
files["0.txt"] = std::make_pair(0, 7);
files["1.txt"] = std::make_pair(8, 41);
files["2.txt"] = std::make_pair(42, 50);
return 0;
}
Есть такая вот хеш-таблица, как максимально эффективно получить доступ к key этой таблицы имея только одну цифру, например 21.
Т.е. нужно в каждом элементе сравнивать находится ли данное число(21) среди диапазона std::pair текущего элемента... и если наш (21) оказался в диапазоне какого-либо std::pair, то мы возвращаем key...
Вот так я собирался делать вручную
std::map<std::string, std::pair<int, int> >::const_iterator begin = files.begin();
std::map<std::string, std::pair<int, int> >::const_iterator end = files.end();
int num = 21;
for (; begin != end; ++begin) {
if (num >= (*begin).second.first && num <= (*begin).second.second) {
std::cout << "Found in " + (*begin).first + "\n";
break;
}
}
Хотелось бы увидеть пример с использованием stl алгоритмов, спасибо.
Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)
rudvil
ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
Как прочитать/вывести первую строку из файла на WINAPI?
(вариант fgets - не интересует)
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
ReadFile() из windows.h
читaй покa нe встрeтишь пeрeвод строки.
По моему лучше будет считать весь файл(часть его если он большой) в память и потом только разбить на строки.
rudvil
ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
Возникла проблема =/#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <boost/bind.hpp>
int main(int argc, char* argv[]) {
typedef std::map<std::string, std::pair<int, int> > map_type;
map_type files;
files["0.txt"] = std::make_pair(0, 7);
files["1.txt"] = std::make_pair(8, 41);
files["2.txt"] = std::make_pair(42, 50);
int num = 21;
map_type::const_iterator elem;
elem = std::find_if(
files.begin(),
files.end(),
boost::bind(
std::logical_and<bool>(),
boost::bind(
std::greater_equal<int>(),
boost::bind(
&map_type::value_type::second_type::first_type,
_1),
num),
boost::bind(
std::less_equal<int>(),
boost::bind(
&map_type::value_type::second_type::second_type,
_1),
num)));
if (elem != files.end())
std::cout << "Found in " + (*elem).first + "\n";
return 0;
}
Компилятор ругается main.cpp:26: error: expected primary-expression before ',' token
main.cpp:32: error: expected primary-expression before ',' tokenт.е. на это:
линия (26) &map_type::value_type::second_type::first_type,
и на это:
линия (32) &map_type::value_type::second_type::second_type,
т.е. как это expected, если с примером который тут http://www.rsdn.ru/article/cpp/boost.bind.xml#EYVAE всё ок(компилирует без ошибок), а тут на тебе...
Я сделал его!!! :D
Может кому понадобится, вот код - правда он стал, ммм... не таким понятным как тут (https://forum.antichat.ru/showpost.php?p=2138400&postcount=5280) :D
#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <boost/bind.hpp>
int main(int argc, char* argv[]) {
typedef std::map<std::string, std::pair<int, int> > map_type;
map_type files;
files["0.txt"] = std::make_pair(0, 7);
files["1.txt"] = std::make_pair(8, 41);
files["2.txt"] = std::make_pair(42, 50);
int num = 21;
map_type::const_iterator elem;
elem = std::find_if(
files.begin(),
files.end(),
boost::bind(
std::logical_and<bool>(),
boost::bind(
std::less_equal<int>(),
boost::bind(
&map_type::value_type::second_type::first,
boost::bind(
&map_type::value_type::second,
_1)
),
num),
boost::bind(
std::greater_equal<int>(),
boost::bind(
&map_type::value_type::second_type::second,
boost::bind(
&map_type::value_type::second,
_1)
),
num)));
if (elem != files.end())
std::cout << "Found in " + (*elem).first + "\n";
return 0;
}
После выполнения мы получим следующееFound in 1.txt
, т.е. 21 находится между 8 и 41.
молодец =)
Если вдруг интересно зачем такой гемор:
1) У тебя крайний случай когда нет никаких методов, обычно более менее общую логику суют в классы, а дальше композиция получается проще.
2) Суть использования stl - например если решат наконец добавить распараллеливание независимых задач, то стл попадет под это первым со своим for_each, find, transform и всеми остальными алгоритмами. Будет на автопилоте при запуске решаться сколько ядер есть в распоряжении и параллелиться. Но пока это мечты мечты =\
3) С лямбда выражениями, которые в новом стандарте добавились, кодить юзая алгоритмы будет еще проще
M.W.N.N.
14.05.2010, 21:31
Здравствуйте.
Подскажите пож-та что не так.
Решил разобратся с curl + с++
Нашел примеры - http://pblog.ru/?p=607
Там приводят листинг:
#include <stdio.h>
#include <curl/curl.h>
//главная функция
int main(void)
{
//уже знакомый объект CURL
CURL *curl;
//объект - результат вызова функции curl_easy_perform
CURLcode res;
//выполняем инициализацю
curl = curl_easy_init();
if(curl) { //проверяем
//задаем опцию - получить страницу по адресу http://google.com
curl_easy_setopt(curl, CURLOPT_URL, "google.com");
//указываем прокси сервер
curl_easy_setopt(curl, CURLOPT_PROXY, "proxy:8080");
//задаем опцию отображение заголовка страницы
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
//вызываем функцию, выполняющюю все операции, заданные в опциях (получение страницы, передача данных и т.д.), результат - объект типа CURLcode
res = curl_easy_perform(curl);
//выполняем обязательное завершение сессии
curl_easy_cleanup(curl);
}
return 0;
}
При попытке компиляции пишет:
:~/cpp$ g++ -o curl curl.cpp
/tmp/ccUnjuIz.o: In function `main':
curl.cpp:(.text+0xa): undefined reference to `curl_easy_init'
curl.cpp:(.text+0x31): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x4d): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x69): undefined reference to `curl_easy_setopt'
curl.cpp:(.text+0x75): undefined reference to `curl_easy_perform'
curl.cpp:(.text+0x85): undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
Что не так?
lib файл подключен? или какой там файл в никсах
M.W.N.N.
14.05.2010, 22:24
А какой подключать то? Я думал что библиотеки curl/curl.h хватит
А какой подключать то? Я думал что библиотеки curl/curl.h хватит
цитата с того-же сайта...Разумеется, перед тем, как начать использование библиотеку – ее нужно получить, установить и дать возможность, своему компилятору, использовать ее. Рассмотрим выполнение этих действий, как обычно на примере двух платформ: Linux и Windows.
В случае Linux – все довольно просто, Вам необходимо скачать http://curl.haxx.se/download/curl-7.16.2.zip
В этом архиве содержиться полный исходный код библиотеки, скрипты сборки, а так же полная документация API и примеры (поэтому пользователям Windows так же не помешает скачать себе этот архив)
После распаковки – необходимо выполнить стандартную процедуру компиляции и установки, с помощью configure и make && make install. Это все, можно пользоваться возможностями библиотеки.
Для компиляции программы, следуюет добавлять к опциям компилятора
Код:
pkg-config --libs libcurl
pkg-config --cflags libcurl
либо
Код:
curl-config --libs libcurl
curl-config --cflags libcurl
M.W.N.N.
14.05.2010, 22:50
Конкретно если не сложно приведите пример как скомпилить, чето все никак не вьеду
После распаковки – необходимо выполнить стандартную процедуру компиляции и установки, с помощью configure и make && make install.
Для компиляции программы, следуюет добавлять к опциям компилятора
Код:
pkg-config --libs libcurl
pkg-config --cflags libcurl
либо
Код:
curl-config --libs libcurl
curl-config --cflags libcurl
Что еще то писать?
diov1213
15.05.2010, 11:17
Установил компилятор C++BUILDER а как им пользоваться незнаю помогите
Установил компилятор C++BUILDER а как им пользоваться незнаю помогите
http://www.softportal.com/software-4157-uchebnik-po-programmirovaniyu-v-srede-c-builder.html
http://itbookz.ru/prog/lang/cbuilder/
http://cbuilder.ru/
http://list.mail.ru/10356/1/0_1_0_1.html
Что предпочтительнее использовать "printf()" или "std::cout" и почему?
BrainDeaD
15.05.2010, 15:17
зависит от ЯП. c - printf(), c++ - std::cout.
потому что это стандартные функции ввода/вывода этих языков.
стоит почитать книжки.
BrainDeaD, спс.
P.S. ачат лучше чем книжка :)
зависит от ЯП. c - printf(), c++ - std::cout.
потому что это стандартные функции ввода/вывода этих языков.
стоит почитать книжки.
чтобы каждый раз не писать std:: проще указать пространство имен сразу.
#include <iostream.h>
using namespace std;
int main() {
cout << "tra-lya-lya!" << endl;
return 0;
}
а так да, лучше начать с книжек
дихво, вот прочти http://programmersforum.ru/showthread.php?t=7566
BrainDeaD
15.05.2010, 16:16
я всего лишь цитировал из вопроса.
а по поводу, что проще и лучше читай стр. 528 этого топика.
оlbaneс, про using namespace знаю, мне просто нравиться писать std:: и всё.
--------------------------------------
http://programmersforum.ru/showthread.php?t=7566
прочитал, ничего нового не узнал.
--------------------------------------
для чего писать endl?
.::f-duck::.
15.05.2010, 16:58
endl?
Конец строки. End Line
yaneblinchik
15.05.2010, 17:03
Конец строки. End Line
Следующая строка , аналог \n
Следующая строка , аналог \n
Конец строки. End Line
не только,Inserts a new-line character.
Additionally, for buffered streams, endl flushes the buffer (i.e. writes all unwritten characters in the buffer to the output sequence, see ostream::flush).
т.е. новая строка + записывает содержимое буфера
чтобы каждый раз не писать std:: проще указать пространство имен сразу.
#include <iostream.h>
using namespace std;
int main() {
cout << "tra-lya-lya!" << endl;
return 0;
}
а так да, лучше начать с книжек
дихво, вот прочти http://programmersforum.ru/showthread.php?t=7566
Если ты подключаешь iostream.h - у тебя старый компилятор, следовательно указание пространства имен не нужно, так как в старых версиях компиляторов С++ не было никаких именных пространств.
qwert135
15.05.2010, 22:38
Всем привет.Проблема в следующем: у меня есть следующая функция, для построения полинома Лагранжа:
double Lagrange(double *X, double *Y, int NumberOfKnots, double X_input){
double solution = 0, *temp;
int i, j;
temp = new double[NumberOfKnots];
for(i = 0;i < NumberOfKnots;i++){
temp[i] = 1;
for(j = 0;j < NumberOfKnots;j++){
if(i != j){
temp[i] = temp[i] * (X_input - X[j]) / (X[i] - X[j]);
}
}
solution = solution + Y[i] * temp[i];
}
delete []temp;
return solution;
}
Теперь мне нужно взять первую и вторую производную, ток я хз как. Есть конечно одна идея, а именно: находить производные от выражений Y[i] * temp[i] и потом просуммировать все полученные производные, но может кто алгоритм получше подскажет.Заранее спасибо.
Если ты подключаешь iostream.h - у тебя старый компилятор, следовательно указание пространства имен не нужно, так как в старых версиях компиляторов С++ не было никаких именных пространств.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main( int argc, char argv[] )
{
for( int number = 98765; number > 0; number /=10 )
{
ты победил :)
у меня студио 2008, а код я в гугле взял.
qwert135
Если есть функция (или полином (пофиг)) (в математическом понятии этого слова).
То производную найти не проблема(в программировании). А именно, нужно пытаться аппроксимировать значения производной в точке из определения производной. ( ну вы поняли, значение производной в т. х0 = пределу при х->x0 (f(x)-f(x0))/x-x0; а это значит: чтобы получить приблизительное зн. производной необходимо взять (например) вместо x -> xFix и xFix-x=10^-10 ) Для второй производной тоже самое только формула другая =).
qwert135
16.05.2010, 02:47
qwert135
Если есть функция (или полином (пофиг)) (в математическом понятии этого слова).
То производную найти не проблема(в программировании). А именно, нужно пытаться аппроксимировать значения производной в точке из определения производной. ( ну вы поняли, значение производной в т. х0 = пределу при х->x0 (f(x)-f(x0))/x-x0; а это значит: чтобы получить приблизительное зн. производной необходимо взять (например) вместо x -> xFix и xFix-x=10^-10 ) Для второй производной тоже самое только формула другая =).
спасибо,попробую реализлвать
Как оправлять через c++ данные методом POST на сервер, есть что почитать? Базовые знания есть, создавал сервер который слушает порт, и клиент, который на порт который слушает сервер отправляет данные.
qwert135
16.05.2010, 13:49
Теперь мучает вторая часть вопроса.Как найти вторую производную?))
Всем привет.
Кому не трудно, набросайте пожалуйста программку, которая
Скопирует сама себя в папку C:\Windows
Или дайте ссылку на мануалы по этим функциям :)
qwert135
Если не вдаваться в объяснения. то
f''(x) = (f(x_left)-2f(x)+f(x_right))/(h^2)
h = |x_left-x|=|x_right-x| = что-то оч. малое
x_left-x<0;
x_right-x>0;
---------------
В общем тут всё понятно, так как вторая производная это производная первой производной...
qwert135
16.05.2010, 17:06
Irdis
спасиб.А как можно проверить пустой файл или нет(файл текстовый, желательно пример)
Irdis
спасиб.А как можно проверить пустой файл или нет(файл текстовый, желательно пример)
Можно юзать file_stat
// read file status, print size, dates etc
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
struct stat file_stat;
int status;
char filename[50]={0};
printf("enter filename ? ");
scanf("%s", filename);
int fildes = open(filename, O_RDWR); // open file
// get file status for details see
// http://www.opengroup.org/onlinepubs/007908799/xsh/fstat.html
status = fstat(fildes, &file_stat); // get its status
// print file status informations for details see
// http://www.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html
printf("file %s size %d\n", filename, file_stat.st_size); // print status
printf("last access %s\n", ctime(&file_stat.st_atime));
printf("last mofification %s\n", ctime(&file_stat.st_mtime));
printf("last status change %s\n", ctime(&file_stat.st_ctime));
return 0;
}
yaneblinchik
17.05.2010, 15:41
Можно юзать file_stat
// read file status, print size, dates etc
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
struct stat file_stat;
int status;
char filename[50]={0};
printf("enter filename ? ");
scanf("%s", filename);
int fildes = open(filename, O_RDWR); // open file
// get file status for details see
// http://www.opengroup.org/onlinepubs/007908799/xsh/fstat.html
status = fstat(fildes, &file_stat); // get its status
// print file status informations for details see
// http://www.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html
printf("file %s size %d\n", filename, file_stat.st_size); // print status
printf("last access %s\n", ctime(&file_stat.st_atime));
printf("last mofification %s\n", ctime(&file_stat.st_mtime));
printf("last status change %s\n", ctime(&file_stat.st_ctime));
return 0;
}
Это же на C?
Это же на C?
А он указал конкретный язык?
agrofyl2
17.05.2010, 17:19
Здравствуйте.
У меня есть код инжекта DLL
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "shlwapi.lib")
//I could just use PROCESS_ALL_ACCESS but it's always best to use the absolute bare minimum of priveleges, so that your code works in as
//many circumstances as possible.
#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
BOOL WriteProcessBYTES(HANDLE hProcess,LPVOID lpBaseAddress,LPCVOID lpBuffer,SIZE_T nSize);
BOOL LoadDll(char *procName, char *dllName);
BOOL InjectDLL(DWORD ProcessID, char *dllName);
unsigned long GetTargetProcessIdFromProcname(char *procName);
bool IsWindowsNT()
{
// check current version of Windows
DWORD version = GetVersion();
// parse return
DWORD majorVersion = (DWORD)(LOBYTE(LOWORD(version)));
DWORD minorVersion = (DWORD)(HIBYTE(LOWORD(version)));
return (version < 0x80000000);
}
//int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
int main() {
cout << "Hello\n";
Sleep(2000);
while(1) {
cout << "\n---------------------------------------------\n";
char process[101], dllname[101];
cout << "Enter process name (example: hl.exe)\n";
cin.getline(process, 100);
cout << "Enter dll name (example: 1vs16.dll)\n";
cin.getline(dllname, 100);
cout << "Try inject...\n";
cout << "Process: " << process << " dll: " << dllname << endl;
if(IsWindowsNT()) LoadDll(process, dllname);
else cout << "Your system does not support this method";
}
return 0;
}
BOOL LoadDll(char *procName, char *dllName)
{
DWORD ProcID = 0;
ProcID = GetTargetProcessIdFromProcname(procName);
cout << "Process ID: " << ProcID << endl;
if(!(InjectDLL(ProcID, dllName))) cout << "Process located, but injection failed\n";
else cout << "Successful!\n";
return true;
}
BOOL InjectDLL(DWORD ProcessID, char *dllName)
{
HANDLE Proc;
char buf[50]={0};
LPVOID RemoteString, LoadLibAddy;
if(!ProcessID)
return false;
Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID);
if(!Proc)
{
sprintf(buf, "OpenProcess() failed: %d", GetLastError());
cout << buf << endl;
return false;
}
LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(dllName), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(Proc, (LPVOID)RemoteString, dllName, strlen(dllName), NULL);
CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL);
CloseHandle(Proc);
return true;
}
unsigned long GetTargetProcessIdFromProcname(char *procName)
{
PROCESSENTRY32 pe;
HANDLE thSnapshot;
BOOL retval, ProcFound = false;
thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(thSnapshot == INVALID_HANDLE_VALUE)
{
cout << "Error: unable to create toolhelp snapshot\n";
return false;
}
pe.dwSize = sizeof(PROCESSENTRY32);
retval = Process32First(thSnapshot, &pe);
while(retval)
{
if(StrStrI(pe.szExeFile, procName) )
{
ProcFound = true;
break;
}
retval = Process32Next(thSnapshot,&pe);
pe.dwSize = sizeof(PROCESSENTRY32);
}
return pe.th32ProcessID;
}
он работает.
Вопрос - как выгрузить длл, загруженную таким образом, из процеса
все тоже самое, только сменить функцию с LoadLibrary на FreeLibrary.
agrofyl2
17.05.2010, 18:24
В этой строчке?
LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
LoadLibraryA-> FreeLibrartA ?
Пробовал, не выгружается так.
да, точно. функция требует хэндл библиотеки. ну вариантов два - либо через tool help функции обойти все модули в требуемом процессе и найти нужную, либо сделать сделать инъекцию кода который внутри того процесса выполнит GetModuleHandle, FreeLibrary
здрасти в ето строке
char** arr=malloc(sizeoff(char*)*count);
выдает ерор cannot convert from void to char, как исправить ето?
Сделай приведение типа, например:
char * var = (char*)malloc( size );
Сделай приведение типа, например:
char * var = (char*)malloc( size );
char ** var = char*malloc( size ); зделал так теперь ерор type char unexpected
скобочки решил оптимизировать? если уж совсем ничего не знаешь - копируй как показали.
тогда идет вапше куча ероров
size underclared identifier
arr underclared identifier
To olesy:
size underclared identifier
arr underclared identifier
Ошибки говорят о том, что не определены arr и size, следовательно могу предположить что ты просто все скопировал не объявил необходимых переменных.
Твой пример будет выглядеть примерно так:
char **arr = (char**)malloc( sizeof(char*) * count );
Дабы не возник вопрос типа:
А почему выдает count underclared identifier ?
Отвечу - необходимо заранее объявить переменную count.
Например так:
int count = 10;
olesy, ты все со своими заданиями мучаешься? Если в Visual Studio компилируешь, делай примерно так:
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main()
{
int count = 5;
int good = 0;
int i, j, len, num = 0;
char** arr = (char**) malloc(sizeof(char*) * count);
arr[0] = "string 1";
arr[1] = "string 2";
arr[2] = "string without numbers";
arr[3] = "also, no numbers";
arr[4] = "str 5";
printf("Strings that do not contain any numbers:\n");
for(i=0; i<count; i++)
{
good = 1;
for(j=0, len = strlen(arr[i]); j < len; j++)
{
if(arr[i][j] >= 48 && arr[i][j] <= 57)
{
good = 0;
break;
}
}
if(good)
{
num++;
printf("\n%s", arr[i]);
}
}
printf("\n\nTotal number: %u", num);
free(arr);
return 0;
}
спасибо но я както хотел сам)
Есть ли смысл для оптимизации, передавать аргументы функции через указатель, напримерvoid show_msg(std::string& msg) {
std::cout << msg;
}если учитывать что эта функция вызывается очень часто и с средним кол. символов в "msg" - 500
Т.е. насколько я понимаю если не передавать через указатель, то при каждом вызове будет происходить копия этого "msg" и последующий его вывод... что мне впринципе нафиг не надо, тогда уже лучше везде прописывать аргументы через ссылки.
Ну не везде, но во всяком случае там - где я точно знаю что в функ. с ним никаких операция кроме чтения не будет.
Есть ли смысл с этим заморачиваться?
Есть ли смысл для оптимизации, передавать аргументы функции через указатель, напримерvoid show_msg(std::string& msg) {
std::cout << msg;
}если учитывать что эта функция вызывается очень часто и с средним кол. символов в "msg" - 500
Т.е. насколько я понимаю если не передавать через указатель, то при каждом вызове будет происходить копия этого "msg" и последующий его вывод... что мне впринципе нафиг не надо, тогда уже лучше везде прописывать аргументы через ссылки.
Ну не везде, но во всяком случае там - где я точно знаю что в функ. с ним никаких операция кроме чтения не будет.
Есть ли смысл с этим заморачиваться?
на сколько я понимаю, тут выгоднее написать
inline void show_msg(std::string msg) {std::cout << msg;}
на сколько я понимаю, тут выгоднее написать
inline void show_msg(std::string msg) {std::cout << msg;}
Да, спасибо это вариант, но ведь копирование аргумента по прежнему будет?
Да, спасибо это вариант, но ведь копирование аргумента по прежнему будет?
если я правильно понимаю механизм inline функций в C, то нет... в такой функции тело заменяет вызов при компиляции. но следует учесть, что inline может быть не воспринят компилятором (это рекомендация а не условия для компилятора).
если я правильно понимаю механизм inline функций в C, то нет... в такой функции тело заменяет вызов при компиляции. но следует учесть, что inline может быть не воспринят компилятором (это рекомендация а не условия для компилятора).
Хмм, ещё раз спасибо - попробую и так - и так, проведу пару тестов, посмотрим где компилятору(в плане оптимизации) больше понравится =]
Хмм, ещё раз спасибо - попробую и так - и так, проведу пару тестов, посмотрим где компилятору(в плане оптимизации) больше понравится =]
напиши потом. заинтриговал =)
напиши потом. заинтриговал =)
Забавно получилось, как говорится не знаешь не трогай ^^
результаты в мс.
1174
752
751
752
748
1043
1024
781
752
751
925
750
753
748
756
774
746
770
759
750
959
764
772
757
757
770
761
771
758
808
Вывод следующий - с такой мелкой оптимизации смысла нет заморачиваться, компилятор всё сделает за тебя.
rudvil, скорее всего он не воспринял inline из-за использования std...
судя по всему способ 1 = способу 3
rudvil, скорее всего он не воспринял inline из-за использования std...
судя по всему способ 1 = способу 3
Как бы там ни было если уж оптимизировать, то оптимизировать нужно скорее общий алгоритм программы, чем всякую мелочь =]
STLcRash
24.05.2010, 12:52
подскажите как после очистки кэша IE
var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; dwLastError: LongWord; begin dwEntrySize := 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); if (hCacheDir <> 0) then DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName ); FreeMem(lpEntryInfo); repeat dwEntrySize := 0; FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); dwLastError := GetLastError(); if (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin GetMem(lpEntryInfo, dwEntrySize); if (FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize)) then DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName ); FreeMem(lpEntryInfo); end; until (dwLastError = ERROR_NO_MORE_ITEMS);
добавить в уже отчищенный кэш куки из edit1.text
BrainDeaD
24.05.2010, 13:59
чувак, это ж не с/с++. ты либо темой ошибся, либо языком.
cookie записываются в файл. для этого тебе надо знать содержание и место хранения cookies.
Какой оператор вычисляет целую часть от деления(с++)? По типу div в Паскале надо.
Спасибо.
inline void show_msg(std::string msg) {std::cout << msg;}
Инлайн-подставка применяется к очень маленьким функциям. При использовании инлайн-подставки компилятор будет генеририровать для функции соответствующий код в месте ее вызова. Это увеличит скорость вызова функции, но не избавит от затрат на копирование.
rudvil, скорее всего он не воспринял inline из-за использования std...
Что-то новое...
M_script_
24.05.2010, 20:25
Какой оператор вычисляет целую часть от деления(с++)? По типу div в Паскале надо.
int a = 10; int b = 4; int c = a/b;
c == 2
M_script_
24.05.2010, 20:35
на сколько я понимаю, тут выгоднее написать
inline void show_msg(std::string msg) {std::cout << msg;}
выгоднее написать
#define show_msg(s) std::cout << s
.::f-duck::.
24.05.2010, 21:11
1.Как обозначить двоичную систему в С++?
2.Как получить доступ к n члену переменной типа int (C++)?
.::f-duck::.
24.05.2010, 21:17
Ну,например,есть переменная:
int one = 1000;
Как вывести,скажем, 2 член?
Было бы это char, то cout << one[2];
2.Как получить доступ к n члену переменной типа int (C++)?
Возможно вы имели в виду получение доступа к N'ому элементу массива?
Тогда проще быть не может:
int arrayNumbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
На пример получить доступ к первому элементу массива можно следующим образом:
arrayNumbers[ 0 ];
0 - потому что массив индексируются начиная с нуля.
UPD:
Ну,например,есть переменная:
int one = 1000;
Как вывести,скажем, 2 член?
Было бы это char, то cout << one[2];
int var = 1000;
int var1 = var % 10; // Это последнее число - 0.
int var2 = var % 100; // предпоследнее - 0.
int var3 = var % 1000; // второе - 0.
int var4 = var % 10000; // первое - 1.
Но это изврат ,)
M_script_
отнюдь не выгоднее, и банально неправильно. это си стайл. не юзают с плюсами. правильно юзать инлайн меотды.
M_script_
25.05.2010, 13:21
M_script_
отнюдь не выгоднее, и банально неправильно. это си стайл. не юзают с плюсами. правильно юзать инлайн меотды.
Что тут неправильно? Инлайн функции - это совершенно другое. Вопрос был в том, как сделать удобнее написание кода и сохранить скорость работы программы.
.::f-duck::.
25.05.2010, 13:22
НОРМАЛЬНОЕ чтиво по ВинСокетам в С++.
Ссылки,желательно на русском.
yaneblinchik
25.05.2010, 13:29
НОРМАЛЬНОЕ чтиво по ВинСокетам в С++.
Ссылки,желательно на русском.
Обычно такие запросы остаются без ответа,так как собственно посвященной именно винсоку книги не встречал,но есть статьи...
Обычно винсок оговаривается в главе какой либо книге,я честно не помню
Почитай к примеру это http://hardteam.ucoz.ru/publ/4-1-0-27
Что тут неправильно? Инлайн функции - это совершенно другое. Вопрос был в том, как сделать удобнее написание кода и сохранить скорость работы программы.
Вопрос был в том, имеет ли смысл оптимизировать функц., как в последствии оказалось нет.
вдобавок у меня эта функция вызывается через указательstd::map<std::string, void(*)(std::string)> tbl;
(tbl["show_msg"])("MESSAGE");
define тут не прокатит, и Ra$cal прав это с++, а не си
M_script_
25.05.2010, 15:49
вдобавок у меня эта функция вызывается через указатель
Если функция вызывается через указатель, о каком инлайне может идти речь? :confused:
agrofyl2
25.05.2010, 16:25
народ как в sprintf в строку вписать знак % ??
так sprintf(p, "%windir%") есстественно не получается.
помогите плиз!
agrofyl2,может быть заэкранировать его? типа "\%"
To agrofyl2:
//////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
//////////////////////////////////////////////////////////////////////////////////////////////
int main ()
{
char buffer[50];
sprintf( buffer, "%%windir%%" );
printf ( "%s\n", buffer );
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
В выводе получим "%windir%".
UPD:
agrofyl2,может быть заэкранировать его? типа "\%"
Вы хотя бы проверяли ваши примеры перед тем как советовать.
agrofyl2
25.05.2010, 21:01
аа, так же как со слешем - удвоение. спасибо
zeppe1in
25.05.2010, 21:18
нужен такой массив. что бы по числу извлечь строку.
123 - abc
5694 - qwe
9999 - asdf
char* str[9999] для 3х строк не вариант. а как сделать?
заюзать map?
map <int,string> str;
и выполнять такой код?
str[123]="abc";
str[5694]="qwe";
str[9999]="asdf";
мне всего то нужно проверять есть ли строка соответствующая числу, и выводить её если есть. а как сделать не придумать)
и выполнять такой код?
str[123]="abc";
str[5694]="qwe";
str[9999]="asdf";
Прикольно, а откуда строки то? Намертво вшиты в код?
нужен такой массив. что бы по числу извлечь строку.
123 - abc
5694 - qwe
9999 - asdf
char* str[9999] для 3х строк не вариант. а как сделать?
заюзать map?
map <int,string> str;
и выполнять такой код?
str[123]="abc";
str[5694]="qwe";
str[9999]="asdf";
мне всего то нужно проверять есть ли строка соответствующая числу, и выводить её если есть. а как сделать не придумать)
ну честно говоря, только бред в голову лезет =)
создаем int *index = new int[9999];
создаем char **str;//ну массив не буду расписывать
и делаем следующие str[index[123]]...
то есть элемент index хранит номер строки в строковом массиве, в номер записи в index это то число что ты хочешь.... как-то так =)
заюзать map?
map <int,string> str;
и выполнять такой код?
str[123]="abc";
str[5694]="qwe";
str[9999]="asdf";
да
2Byte_
ну честно говоря, только бред в голову лезет =)
это точно не вариант
обязательно использование массива?
нужен такой массив. что бы по числу извлечь строку.
123 - abc
5694 - qwe
9999 - asdf
char* str[9999] для 3х строк не вариант. а как сделать?
заюзать map?
map <int,string> str;
и выполнять такой код?
str[123]="abc";
str[5694]="qwe";
str[9999]="asdf";
мне всего то нужно проверять есть ли строка соответствующая числу, и выводить её если есть. а как сделать не придумать)
_http://www.cplusplus.com/reference/stl/map/
zeppe1in
26.05.2010, 15:31
Прикольно, а откуда строки то? Намертво вшиты в код?
да, вшиты намертво.
обязательно использование массива?
нет. мне всего то нужно проверять есть ли строка соответствующая числу, и выводить её если есть.
http://www.cplusplus.com/reference/stl/map/
ну я читал это. и что?
пока остановился на мапе и его инициализации в начале.
Есть проблема такого характера, хотел бы чтоб с формы можно было задавать кол-во потоков в приложении использую TThread использую такое объявлений
int nThreds = StrToInt(Edit1->Text);
Thread *thr[nThreds];
for(int i=0;i<nThreads;i++){
thr[i] = new Thread(false);
}
пишет ошибку [BCC32 Error] Constant expression required
Использую как видите Builder помогитре разобраться плз
Есть проблема такого характера, хотел бы чтоб с формы можно было задавать кол-во потоков в приложении использую TThread использую такое объявлений
int nThreds = StrToInt(Edit1->Text);
Thread *thr[nThreds];
for(int i=0;i<nThreads;i++){
thr[i] = new Thread(false);
}
пишет ошибку [BCC32 Error] Constant expression required
Использую как видите Builder помогитре разобраться плз
int nThreds = StrToInt(Edit1->Text);
Thread *thr = new Thread[nThreds];
}
2rudvil
Не не подходит твоим методом выдает то что нужно инициализировать конструктор.
list<Thread> dd;
for (int i = 0; i < 10;i++)
{
dd.push_back(Thread(false));
}
в пень массивы, и динамическую память
STLcRash
27.05.2010, 20:13
Искал, как програмно нажать сочетание клавишь ctrl + v куча инфы, но ничго из этого не работало в моем случае.
У меня прога грузит приложение из контакта, там кроме логина и пароля от контакта, есть ещё встроенный в игру пароль, с клавиатуры в том окошке ctrl + v работает, с эмуляцией - же ничего не выходит. Подсажите как ещё можно вставить из буфера пароль в то окошко? (там не edit и не memo, а встроенное в fkash игру окошко)
M_script_
28.05.2010, 06:49
Есть проблема такого характера, хотел бы чтоб с формы можно было задавать кол-во потоков в приложении использую TThread использую такое объявлений
Написано же, используй константу.
const int nMaxThreads = 1000;
int nThreads = StrToInt(Edit1->Text);
Thread *thr[nMaxThreads];
for(int i=0;i<nThreads;i++){
thr[i] = new Thread(false);
}
qwert135
28.05.2010, 18:52
Всем привет. Проблема в следующем.
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
void Diagonal(double **A, int NumberOfEquation) {
double *temp_massiv;
int i, j;
double max, replace;
temp_massiv = new double[NumberOfEquation];
for(i = 0;i < NumberOfEquation;i++){
max = A[i][0];
for(j = 0;j < NumberOfEquation;j++){
if(A[i][i] != 0) continue;
else{
if(A[i][j] >= max) max = A[i][j];
temp_massiv[i] = max;
}
}
}
for(i = 0;i < NumberOfEquation;i++){
for(j = 0;j < NumberOfEquation;j++){
if(A[i][j] == temp_massiv[i]){
replace = A[i][i];
A[i][i] = A[i][j];
A[i][j] = replace;
}
}
}
delete []temp_massiv;
}
int SimpleIteration(double **A, double *B, int NumberOfEquation, double *solution, double fault_input) {
int i, j, step = 1;
double *TempSolution;
TempSolution = new double[NumberOfEquation];
double fault = fault_input + 1;
for(i = 0;i < NumberOfEquation;i++) {
for(j = 0;j < NumberOfEquation;j++) {
if(i != j) {
A[i][j] = -A[i][j] / A[i][i];
}
}
B[i] = B[i] / A[i][i];
A[i][i] = 0;
}
for(i = 0;i < NumberOfEquation;i++) {
solution[i] = B[i];
}
while(fault > fault_input && step <= 1000) {
for(j = 0;j < NumberOfEquation;j++) {
TempSolution[j] = 0;
}
for(i = 0;i < NumberOfEquation;i++) {
for(j = 0;j < NumberOfEquation;j++) {
TempSolution[i] = TempSolution[i] + A[i][j]*solution[j];
}
TempSolution[i] = TempSolution[i] + B[i];
}
fault = 0.0;
for(j = 0;j < NumberOfEquation;j++) {
fault = fault + (solution[j] - TempSolution[j])*(solution[j] - TempSolution[j]);
}
fault = sqrt(fault);
for(j = 0;j < NumberOfEquation;j++) {
solution[j] = TempSolution[j];
}
step++;
}
delete []TempSolution;
return step;
}
void file_input_output(){
int i, j, row = 0, column = 0;
double **A, *B, *solution, **temp_matrix, fault_input;
char k[128];
//вычисляем размерность введенной расширенной матрицы системы
ifstream in("input_data.txt");
while(true) {
in.read(k, 1);
if(k[0] == ' ') column++;
if(k[0] == '\n'){
row++;
column++;
}
if(in.eof()){
row++;
column++;
break;
}
}
column = column/row;
in.close();
//выделяем память под матрицу коэффициентов при неизвестных
A = new double*[row];
for(i = 0;i < row;i++){
A[i] = new double[row];
}
//выделяем память под вектор свободных членов
B = new double[row];
//выделяем память под вспомогательную матрицу
temp_matrix = new double*[row];
for(i = 0;i < column;i++){
temp_matrix[i] = new double[row];
}
//выделяем память под вектор неизвестных
solution = new double[row];
//считываем матрицу во временный массив
ifstream fin("input_data.txt");
for(i = 0;i < row;i++){
for(j = 0;j < column;j++){
fin >> temp_matrix[i][j];
}
}
fin.close();
//из временного массива выбираем нужные элементы
//для матрицы коэффициентов при неизвестных
for(i = 0;i < row;i++){
for(j = 0;j < column - 1;j++){
A[i][j] = temp_matrix[i][j];
}
}
//для вектора свободных членов
for(i = 0;i < row;i++){
for(j = column - 1;j > column - 2;j--){
B[i] = temp_matrix[i][j];
}
}
Diagonal(A, row);
cout << "Введите точность вычислений: ";
cin >> fault_input;
int steps = SimpleIteration(A, B, row, solution, fault_input);
if(steps > 1000) {
cout << "Ошибка!!! Возможные причины:\n";
cout << "1)Слишком большое количество итераций.\n";
cout << "2)Какие-либо строки(столбцы) линейно зависимы.\n";
}
else {
ofstream out("solution.txt");
out << "Решение СЛАУ:\n";
for(j = 0;j < row;j++) {
out << solution[j] << "\n";
}
out << "Количество итераций: " << steps;
cout << "Результат вычислений записан в файл 'solution.txt'.\n";
out.close();
system("solution.txt");
}
//очищаем выделенную память, здесь все нормально
for(i = 0;i < row;i++) {
delete []A[i];
}
delete []A;
delete []B;
delete []solution;
//а вот на этом месте,при очистки памяти выделенной под временный
//массив, прога при работе выдает ошибку(компилится все норм)
for(i = 0;i < column;i++){
delete []temp_matrix[i];
}
delete []temp_matrix;
}
int main() {
cout << "Данная программа предназначена для решения СЛАУ методом простых итераций.\n";
file_input_output();
system("pause");
return 0;
}
Вот сама ошибка, среда VS2010.
Debug Assertion Failed!
...
Expression:_CrtIsValidHeapPointer(pUserData)
...
Плиз, помогите разобраться что не так, просто раньше норм все работало, а щас че т не хочет.
Плиз, помогите разобраться что не так, просто раньше норм все работало, а щас че т не хочет.
приведи пример входного файла
qwert135
28.05.2010, 19:45
10 1 1 12
2 10 1 13
2 2 10 14
Все элементы записаны через пробел, лишних нет(пробелов).Количество сторок и столбцов в функции file_input_output() вычисляется верно, проверял.И, кстати, когда открывается файл "solution.txt" решение в нем верное записано.
P.S. какими функциями можно проверить состояние памяти, как например MemAvail и MaxAvail в паскале?
а какую точность вводить? вроде считает, результаты выводит, но по закрытию пишет что куча повреждена)) у меня VS 2008 TS
qwert135
28.05.2010, 20:19
а какую точность вводить? вроде считает, результаты выводит, но по закрытию пишет что куча повреждена)) у меня VS 2008 TS
Вот таже хрень, точность можно любую, к тому примеру, который я написал, достаточно 0.0001 , и прога выдаст точное решение (1 1 1).Можно конечно убрать
for(i = 0;i < column;i++){
delete []temp_matrix[i];
}
delete []temp_matrix;
и все будет норм работать, но хотелось разобраться, да и память замусоривать нехорошо))
Вот блин, ща попробовал в CodeBlocks скомпилить и запустить, и о чудо, там все норм.
temp_matrix = new double*[row];
for(i = 0;i < column;i++){
temp_matrix[i] = new double[row];
}
это бред если column!=row
qwert135
28.05.2010, 20:30
это бред если column!=row
Пробовал, тоже самое.Кстати,еще вот это сообщение VS выводит
Windows has triggered a breakpoint in SLAU.exe.
This may be due to a corruption of the heap, which indicates a bug in SLAU.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while SLAU.exe has focus.
The output window may have more diagnostic information.
qwert135
28.05.2010, 20:32
это бред если column!=row
Сори, не туда посмотрел, ту ты прав. Все равно таж ошибка.
разберитесь где у вас column а где row...
я пытался понять, но сложилось такое впечатление, что они перепутаны в каждой второй строке.
вот кстати как делаются матрицы:
temp_matrix = new double*[row];
for(i = 0;i < row;i++){
temp_matrix[i] = new double[column];
}
for(i = 0;i < row;i++){
delete [] temp_matrix[i];
}
delete [] temp_matrix;
qwert135
28.05.2010, 20:40
Все, разобрался.Спасибо всем за помощь. У меня получалась матрица(в примере) 3х4, а я выделял память для 4х3))).Тогда следующий вопрос-почему CodeBlocks эт пропустил?))
qwert135
28.05.2010, 20:44
разберитесь где у вас column а где row...
я пытался понять, но сложилось такое впечатление, что они перепутаны в каждой второй строке.
вот кстати как делаются матрицы:
Особенно большое СПАСИБО
P.S. какими функциями можно проверить состояние памяти, как например MemAvail и MaxAvail в паскале?
посоветуйте книгу(с++) потоки и сети можно 2 разные книги)
буду благодарен
Как лучше организовать потоки в бруте: 1 поток = 1 пароль, 1 поток = 10 паролей или др?
И можно ли передать потоку 2 параметра (структуры использовать не хочется)?
PS: брут серверов
BrainDeaD
28.05.2010, 23:37
ну уж точно не 1 поток на 1 пароль. так у тебя поток может создаваться дольше чем идёт проверка одного пасса. всё зависит от скорости. делай значение переменным и пробуй изменять. смотри как прога реагирует. лично я бы так делал.
M_script_
29.05.2010, 09:50
И можно ли передать потоку 2 параметра (структуры использовать не хочется)?
Можно, если использовать TThread из VCL или написать свой класс для работы с потоками.
STLcRash
29.05.2010, 11:56
procedure klickkor(korX:integer;korY:integer); // p - пауза в секукндах var Pt: TPoint; begin Pt.x := korX; Pt.y := korY; {Преобразуем Pt к координатам экрана} Pt := ClientToScreen(Pt); {Преобразуем Pt к "mickeys" (аболютным координатам курсора мышки} Pt.x := Round(Pt.x * (65535 / Screen.Width)); Pt.y := Round(Pt.y * (65535 / Screen.Height)); {Переместим курсор мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0); {Имитируем нажатие левой кнопки мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0); {Имитируем отпускание левой кнопки мыши} Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0); end;
однако вылазит ошибка
Unit1.pas(225): Incompatible types: 'HWND' and 'TPoint
Что я не так делаю?
название топика читаешь криво
qwert135
30.05.2010, 11:15
Народ, переведите плиз следующий код из С++ на С, а именно потоковый вывод через printf(), заранее спасибо.
//N101
#include <iostream.h>
#include <conio.h>
int main()
{ int i,j,k1,k2,n;
n=10000000 ;//до какого числа считать
cout << "Numbers(less then 1000000), the sum of numbers of which is divided on 7.\n\n";
for (i=2;i<n;i++){
j=i+1;
k2=0;
while (j>0){
k2+= j%10;
j/=10;
}
if (k1%7==0 && k2%7==0){
cout << "Number is: ";
cout << i << "\n";
}
k1=k2;
}
cout << "\n";
getch();
return 0;
}
//N101
#include <stdio.h>
int main()
{
int i, j, k1, k2, n;
n = 10000000 ;
printf( "Numbers(less then 1000000), the sum of numbers of which is divided on 7.\n\n" );
for ( i = 2; i < n; i++ )
{
j = i + 1;
k2 = 0;
while( j > 0 )
{
k2 += j % 10;
j /= 10;
}
if ( k1 % 7 == 0 && k2 % 7 == 0)
{
printf( "%s: %d \n", "Number is", i );
}
k1 = k2;
}
printf( "\n" );
getch();
return 0;
}
Но сразу скажу, что твой код не корректен.
qwert135
30.05.2010, 15:08
Ins3t Да эт не мой код, спасиб за помощь.
Взято из примеров boost'a.
Функции чтения текстовых файлов.#include <iostream>
#include <fstream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
// Helper function reading a file into a string
///////////////////////////////////////////////////////////////////////////////
inline std::string
read_from_file(char const* infile)
{
std::ifstream instream(infile);
if (!instream.is_open()) {
std::cerr << "Couldn't open file: " << infile << std::endl;
exit(-1);
}
instream.unsetf(std::ios::skipws); // No white space skipping!
return std::string(std::istreambuf_iterator<char>(instream.rdbuf()),
std::istreambuf_iterator<char>());
}
Чем boost'овский вариант лучше(правильней?), чем скажем этот?std::string read_from_file(char const* infile) {
std::ifstream instream(infile);
if (!instream.is_open()) {
std::cerr << "Couldn't open file: " << infile << std::endl;
exit(-1);
}
std::string str;
std::getline(instream, str, '\0');
return str;
}
Понятное дело там(в boost'e) что попало не пишут и раз делают так, то скорее всего так лучше(правильней?), хочется узнать из за-чего и почему.
Подскажите, пожалуйста, как на языке паскаля записать вот эти формулы:
y=корень квадратный(1-0,1sin^2 фи)
y=log(5снизу)х / корень квадратный(x) - 1
Подскажите, пожалуйста, как на языке паскаля записать вот эти формулы:
y=корень квадратный(1-0,1sin^2 фи)
y=log(5снизу)х / корень квадратный(x) - 1
Прочитай название темы, только внимательно!
rudvil, а где буст? Тут только stl вижу.
Если заглянуть в код std::getline то поймешь, что
примеры практически идентичные, пользуйся каким удобнее.
rudvil, а где буст? Тут только stl вижу.
Если заглянуть в код std::getline то поймешь, что
примеры практически идентичные, пользуйся каким удобнее.
Я про другое =]
Про то - что в своих примерах разных библиотек "boost_1_43_0/libs/libname/example/"...
они используют эту функцию, для чтения текстовых файлов, собственно и стало непонятно и интересно, в чем их функция обыгрывает тот пример что я писал выше?
.::f-duck::.
02.06.2010, 16:18
Необходимо программно запустить cmd.exe и также программно выполнить в ней определенную операцию,например, CD C:\
Как такое сделать?
В c++builder
есть например такой код:
TIdHTTP *IdHTTP1;
void __fastcall TForm1::IdHTTP1Connected(TObject *Sender)
{
///bla-bla-bla
}
можно ли по аналогии сделать обработку такого события для массива обьектов TIdHTTP, заданных вот так:
TIdHTTP *IdHTTP[100];
M_script_
08.06.2010, 12:28
можно ли по аналогии сделать обработку такого события для массива обьектов TIdHTTP.
Можно. В цикле всем объектам присваивай один обработчик.
Можно. В цикле всем объектам присваивай один обработчик.
делаю вот так:
TIdHTTP * http;
void __fastcall IdHTTPConnected(TObject *Sender)
{
//bla-bla-bla
}
http->OnConnected = IdHTTPConnected;
на что оно ругается:
E2034 Cannot convert 'void (_fastcall *)(TObject *)' to 'TNotifyEvent'
я понимаю что не соответствие типов, но как это все "согласовать" не знаю)
ktotikyc332
10.06.2010, 07:19
а вот у меня вопрос!!я щяс буду выглядить дибилом))я написал наипростейщуюпрогу на C++ в Microsoft Visual C++ 2008 Express Edition а как посмотреть действие программы тоесть я сделал прогу а терь её включить как?)))) :D :D :D :D :confused: :confused: я прогу взял из учебника
#include <iostream> int main() { cout<<"Hellow, World!\n"; return 0; }
M_script_
10.06.2010, 08:58
Smapt, примерно так:
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
for(int i = 0; i < 100; ++i)
{
http[i] = new TIdHTTP(NULL);
http[i]->OnConnected = IdHTTP1Connected;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdHTTPConnected(TObject *Sender)
{
return;
}
//---------------------------------------------------------------------------
а вот у меня вопрос!!я щяс буду выглядить дибилом))я написал наипростейщуюпрогу на C++ в Microsoft Visual C++ 2008 Express Edition а как посмотреть действие программы тоесть я сделал прогу а терь её включить как?)))) :D :D :D :D :confused: :confused: я прогу взял из учебника
#include <iostream> int main() { cout<<"Hellow, World!\n"; return 0; }
ф10. изучи строку меню
ребята нужно написать программу на с++ forms
Не сложная, пару часов работы, кто может помочь напишите 1331316, хорошо заплачу
подскажите, как добавить свой файл (rect.h, rect.cpp) в проект с++, VS 2008?
ps когда пишу #include "rect.h" - error LNK2019: ссылка на неразрешенный внешний символ
разобрался!
помимо того чтоб указать #include "rect.h", нужно еще добавить файлы *.h, *.cpp в "обозревателе решений"
Народ подкинте литературку о функциях для работы с файлами.
Открытие/закрытие
Редактирование/Чтение из файла
Копирование/Переименование/Удаление
размер/дата создания файла и прочая инфа.
Весь гугл истоптал.
Весь гугл истоптал.
только врать не надо =]
http://www.cplusplus.com/doc/tutorial/files/
http://doc.trolltech.com/4.6/qfile.html
http://doc.trolltech.com/4.6/qfileinfo.html
http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm
только врать не надо =]
http://doc.trolltech.com/4.6/qfile.html
http://doc.trolltech.com/4.6/qfileinfo.html
http://www.cplusplus.com/doc/tutorial/files/
http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm
Честное пионерское))Просто на русском искал-одни форумы
ЗЫ
Спасибо
Вобщем программа
#include <vcl.h>
#include <iostream>
#include <windows>
#pragma hdrstop
#pragma argsused
using namespace std;
//----------------------
int main()
{
char str[20];
struct user
{
char name[20];
char nick[20];
char email[20];
int icq;
}userdata;
CharToOem("Введите имя\n",str);
cout << str;
cin >> userdata.name;
//--------------------------
CharToOem("Введите ник\n",str);
cout << str;
cin >> userdata.nick;
//---------------------------
CharToOem("Введите Email\n",str);
cout << str;
cin >> userdata.email;
//----------------------------
CharToOem("Введите icq\n",str);
cout << str;
cin >> userdata.icq;
//----------Вывод
cout << "\n**********\n";
cout << userdata.name << "\n" <<userdata.nick << "\n" << userdata.email << "\n" << userdata.icq << "\n-----------\n";
FILE *fp;
fp=fopen("c:\\user.txt","wt");
fprintf (fp,"%name%nick%email%icq",userdata.name,userdata.nick,userdata.email,userda ta.icq);
fclose(fp);
system("pause");
}
Фишка в чем,члены структуры выводятся нормально,но при записи в файл забивает мусор.Не соответствие типов?
Grek
смотрим на const char * format
и для чего он нужен
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/
2Grek мешать С++ с Си не хорошо
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
struct user {
std::string name;
std::string nick;
std::string email;
int icq;
};
int main(int argc, char* argv[]) {
std::setlocale(LC_ALL, "Russian");
user userdata;
std::cout << "Введите имя\n";
std::cin >> userdata.name;
std::cout << "Введите ник\n";
std::cin >> userdata.nick;
std::cout << "Введите Email\n";
std::cin >> userdata.email;
std::cout << "Введите icq\n";
std::cin >> userdata.icq;
std::ofstream file("C:\\user.txt");
file << "name:" << userdata.name << "\n";
file << "nick:" << userdata.nick << "\n";
file << "email:" << userdata.email << "\n";
file << "icq:" << userdata.icq;
file.close();
system("pause");
}
вот так точно будет работать.
2Grek мешать С++ с Си не хорошо
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
struct user {
std::string name;
std::string nick;
std::string email;
int icq;
};
int main(int argc, char* argv[]) {
std::setlocale(LC_ALL, "Russian");
user userdata;
std::cout << "Введите имя\n";
std::cin >> userdata.name;
std::cout << "Введите ник\n";
std::cin >> userdata.nick;
std::cout << "Введите Email\n";
std::cin >> userdata.email;
std::cout << "Введите icq\n";
std::cin >> userdata.icq;
std::ofstream file("C:\\user.txt");
file << "name:" << userdata.name << "\n";
file << "nick:" << userdata.nick << "\n";
file << "email:" << userdata.email << "\n";
file << "icq:" << userdata.icq;
file.close();
system("pause");
}
вот так точно будет работать.
учебники просто разные,сборная CCCP ))
Спасиб всем.Разобрался почуть.
Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
qwert135
14.06.2010, 21:32
Grek
ну и в довесок - не юзай using namespace std. если хочется упростить - делай
using std::cin;
using std::cout;
using std::string;
using std::ofstream;
юзанье всего неймспейса - моветон.
Сори за глупый вопрос, но почему using namespace std нехорошо?
потому что могут перекрыться классы в неймспейсах, например будет класс string из stl, и класс string от стороннего поставщика с гораздо большим функционалом, например в неймспейсе megalib. Если заюзить неймспесы std и megalib будет конфликт. Так же если вы не заюзали стд, а заюзали megalib, то при использовании объявления string наверняка большинство будет думать о классе стринг из std. То же самое будет и с самим разработчиком через некоторое время. То есть теперь надо будет думать, а откуда этот класс взят. Ну и плюс все что объявлно в неймспейсе становится видимо глобально. Поэтому и не рекомендуют так делать.
И да, все юзинги писать надо в cpp файлах, а не в хидерах.
qwert135
14.06.2010, 23:10
Все понятно.Спасибо.
mailbrush
17.06.2010, 12:52
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?
do
{
iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?
Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?
Спасибо заранее.
string answer;
while( (iResult = recv(s, response, 1024, 0)) > 0)
answer.append(response, iResult);
//весь ответ в answer.c_str()
Если нуллбайты будут в ответе, то такой способ скорее всего не подойдет.
herfleisch
17.06.2010, 13:33
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?
do
{
iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?
Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?
Спасибо заранее.
Храни строки в списке, а не в массиве. Например, принимаешь по 1024 символа.
Собственно список - это и есть какое-то подобие динамического массива.
Тогда кодишь так:
struct info
{
info * next; // Указатель на след. элемент
info * prev; // и на предыдущий
char data[1024];
} node;
...
recv(s, node.data, 1024, 0);
/*
В классе хранишь указатели на первую принятую строку. Далее раотаешь с объектом.
*/
...
Далее можно написать класс, реализующий линейный двусвязный список, нафигачить ему конструкторы копирования всякие, перегрузку выражений и т.д.
POS_troi
17.06.2010, 13:33
Посоветуйте какую нить приблуду для парсинга XML и ini. Желательно чтобы обвертки поменьше катать нужно было.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot