очередная шляпа приключилась. Вроде всё делаю по книге, но что-то не то. Компилятор очень ругаеццо. Подскажите Code: #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: разве не так должно быть? - upd2: у меня работает в таком виде:
#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
#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 к некому объекту является говнокодом. А по поводу глобальных неймспейсов, по моему, уже не раз говорилось.
Ins3t,нутк,понятно,если там пару надо вписать,а если строк 200. Это представляешь,сколько лишнего говна?
Ну да, разумеется нужно пихать неймспейсы в глобальные, чтобы избежать написания "std::", и плевать что может возникнуть конфликт имен. Это можно делать в определенных случаях и весьма не обязательно. А говнокодом можно назвать примерно следующее: Code: case UP : o > 0 ? o-- : o = FIELD_SIZE - 1; break; А указывать пространство имен - это вполне нормально.
Code: #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:air текущего элемента... и если наш (21) оказался в диапазоне какого-либо std:air, то мы возвращаем key... Вот так я собирался делать вручную Code: 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 алгоритмов, спасибо.
rudvil ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
По моему лучше будет считать весь файл(часть его если он большой) в память и потом только разбить на строки.
Возникла проблема =/ Code: #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; } Компилятор ругается т.е. на это: линия (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 всё ок(компилирует без ошибок), а тут на тебе...
Я сделал его!!! Может кому понадобится, вот код - правда он стал, ммм... не таким понятным как тут Code: #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; } После выполнения мы получим следующее , т.е. 21 находится между 8 и 41.
молодец =) Если вдруг интересно зачем такой гемор: 1) У тебя крайний случай когда нет никаких методов, обычно более менее общую логику суют в классы, а дальше композиция получается проще. 2) Суть использования stl - например если решат наконец добавить распараллеливание независимых задач, то стл попадет под это первым со своим for_each, find, transform и всеми остальными алгоритмами. Будет на автопилоте при запуске решаться сколько ядер есть в распоряжении и параллелиться. Но пока это мечты мечты =\ 3) С лямбда выражениями, которые в новом стандарте добавились, кодить юзая алгоритмы будет еще проще
Здравствуйте. Подскажите пож-та что не так. Решил разобратся с curl + с++ Нашел примеры - http://pblog.ru/?p=607 Там приводят листинг: Code: #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; } При попытке компиляции пишет: Code: :~/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 Что не так?