[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. zlo12

    zlo12 Elder - Старейшина

    Joined:
    28 Dec 2007
    Messages:
    535
    Likes Received:
    135
    Reputations:
    34
    очередная шляпа приключилась.
    Вроде всё делаю по книге, но что-то не то.
    Компилятор очень ругаеццо. Подскажите
    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;
    }
    
     
  2. Linkus

    Linkus Member

    Joined:
    20 Dec 2008
    Messages:
    168
    Likes Received:
    15
    Reputations:
    -1
    zlo12, чё компилёр то говорит? и какой он? ))

    upd:
    разве не так должно быть? -

    upd2:

    у меня работает в таком виде:

     
    #5202 Linkus, 8 May 2010
    Last edited: 8 May 2010
  3. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Всюду писать std:: - не говнокод?
    И что делает ф-цтя getche(); (Зачем она нужна,пример)
     
    #5203 .::f-duck::., 9 May 2010
    Last edited: 9 May 2010
  4. yaneblinchik

    yaneblinchik Member

    Joined:
    6 Feb 2010
    Messages:
    113
    Likes Received:
    19
    Reputations:
    0
    1 Говнокод,можно и по -другому выстроить код

    2 Ждет пока введут что нибудь с клавиатуры
     
  5. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    #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
     
    #5205 Besi, 9 May 2010
    Last edited: 9 May 2010
  6. yaneblinchik

    yaneblinchik Member

    Joined:
    6 Feb 2010
    Messages:
    113
    Likes Received:
    19
    Reputations:
    0
    #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();
    }
     
  7. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Возник вопрос по OpenGL :

    Возможно ли с помощью Glaux сделать меню? Обычное или контекстное - неважно.

    P.S. По графике темы на форуме не нашёл, поэтому запостил сюда, ибо пишу на плюсах
     
  8. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Назови хотя бы одну причину, по которой применения пространства имен std к некому объекту является говнокодом.

    А по поводу глобальных неймспейсов, по моему, уже не раз говорилось.
     
  9. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Ins3t,нутк,понятно,если там пару надо вписать,а если строк 200. Это представляешь,сколько лишнего говна?
     
  10. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Ну да, разумеется нужно пихать неймспейсы в глобальные, чтобы избежать написания "std::", и плевать что может возникнуть конфликт имен.

    Это можно делать в определенных случаях и весьма не обязательно.

    А говнокодом можно назвать примерно следующее:

    Code:
    case UP : o > 0 ? o-- : o = FIELD_SIZE - 1; break;
    
    А указывать пространство имен - это вполне нормально.
     
  11. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    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::pair текущего элемента... и если наш (21) оказался в диапазоне какого-либо std::pair, то мы возвращаем 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 алгоритмов, спасибо.
     
  12. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Как прочитать/вывести первую строку из файла на WINAPI?
    (вариант fgets - не интересует)
     
    #5212 wolmer, 13 May 2010
    Last edited: 13 May 2010
  13. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    rudvil
    ну тут тока std::for_each, а для связывания проще и удобнее использовать http://www.rsdn.ru/article/cpp/boost.bind.xml
     
    #5213 Ra$cal, 13 May 2010
    Last edited: 13 May 2010
    1 person likes this.
  14. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    ReadFile() из windows.h
    читaй покa нe встрeтишь пeрeвод строки.
     
  15. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    По моему лучше будет считать весь файл(часть его если он большой) в память и потом только разбить на строки.
     
  16. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Возникла проблема =/
    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 всё ок(компилирует без ошибок), а тут на тебе...
     
    #5216 rudvil, 13 May 2010
    Last edited: 13 May 2010
  17. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Я сделал его!!! :D
    Может кому понадобится, вот код - правда он стал, ммм... не таким понятным как тут :D
    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.
     
    #5217 rudvil, 13 May 2010
    Last edited: 13 May 2010
    1 person likes this.
  18. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    молодец =)
    Если вдруг интересно зачем такой гемор:
    1) У тебя крайний случай когда нет никаких методов, обычно более менее общую логику суют в классы, а дальше композиция получается проще.
    2) Суть использования stl - например если решат наконец добавить распараллеливание независимых задач, то стл попадет под это первым со своим for_each, find, transform и всеми остальными алгоритмами. Будет на автопилоте при запуске решаться сколько ядер есть в распоряжении и параллелиться. Но пока это мечты мечты =\
    3) С лямбда выражениями, которые в новом стандарте добавились, кодить юзая алгоритмы будет еще проще
     
  19. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Здравствуйте.
    Подскажите пож-та что не так.
    Решил разобратся с 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
    
    Что не так?
     
  20. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    lib файл подключен? или какой там файл в никсах
     
Thread Status:
Not open for further replies.