Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 18:25   #61
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

О. Теперь вопрос: и как, работает?

А, вижу.
Поправки: в switch дописать getch(), в начале добавить #include <conio.h> (это библиотека, отвечающая за взаимодействие с консолью - console input/output), а метки case заменить на числа. Ещё раз, в коде:
17 - константа, представляющая число 17.
'd' - константа, представляющая число, код символа d.
"mama" - константа, представляющая адрес в памяти начала строки, содержащей "mama" (подобное никогда не надо использовать в case-метках).
'mama' - бессмыслица. Скорее всего, компилятор интерпретирует это как число, код символа m - но не уверен. Не пишите такого больше.
3 - константа, представляющая число 3.
'3' - константа, представляющая число, код символа 3 (это число равно 51).

Что ещё хуже, с кодировками опять путаница и похоже что по моей вине. Стрелки "читаются" getch, но своеобразным образом и их коды... в общем, вот код с константами:
Код:
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

class ToolBooth 
{
private:
  unsigned int a; // chislo avtomobilei
  double s; //summarnaya viruchka
public:
  ToolBooth(void): a(0), s(0)
  {}

  void PayingCar(void)
  { ++a, s += 0.5f; }

  void NopayCar(void)
  {
    ++a;
  }
  
  void Display(void) const;
}; 

void ToolBooth::Display(void) const
{    
  std::cout << "Chislo avtomobilei" <<a << std::endl;
  std::cout << "Summarnaya viruchka"<<s << std::endl;
}

//Константы клавиш. На самом деле, их проще определять экспериментально, чем-то вроде std::cout << getch()
const int ESC_key = 27;
const int SPACE_key = 32;
const int ENTER_key = 13;

const int LEFT_key = 75; //Да-да, такой же, как K. Их можно различить, но пока фиг с ним
const int RIGHT_key = 77;
const int UP_key = 72;
const int DOWN_key = 80;

int main(void){
  ToolBooth k;
  while(true)
  {
    switch (getch())
    {
    case ESC_key: 
      k.Display(); 
      return 0;
    
    case LEFT_key: k.PayingCar(); break;
    case RIGHT_key: k.NopayCar(); break;
    }
  } 
}

Последний раз редактировалось Abstraction; 21.02.2013 в 18:27.
Abstraction вне форума Ответить с цитированием
Старый 21.02.2013, 18:54   #62
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
О. Теперь вопрос: и как, работает?

А, вижу.
Поправки: в switch дописать getch(), в начале добавить #include <conio.h> (это библиотека, отвечающая за взаимодействие с консолью - console input/output), а метки case заменить на числа. Ещё раз, в коде:
17 - константа, представляющая число 17.
'd' - константа, представляющая число, код символа d.
"mama" - константа, представляющая адрес в памяти начала строки, содержащей "mama" (подобное никогда не надо использовать в case-метках).
'mama' - бессмыслица. Скорее всего, компилятор интерпретирует это как число, код символа m - но не уверен. Не пишите такого больше.
3 - константа, представляющая число 3.
'3' - константа, представляющая число, код символа 3 (это число равно 51).

Что ещё хуже, с кодировками опять путаница и похоже что по моей вине. Стрелки "читаются" getch, но своеобразным образом и их коды... в общем, вот код с константами:
Код:
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

class ToolBooth 
{
private:
  unsigned int a; // chislo avtomobilei
  double s; //summarnaya viruchka
public:
  ToolBooth(void): a(0), s(0)
  {}

  void PayingCar(void)
  { ++a, s += 0.5f; }

  void NopayCar(void)
  {
    ++a;
  }
  
  void Display(void) const;
}; 

void ToolBooth::Display(void) const
{    
  std::cout << "Chislo avtomobilei" <<a << std::endl;
  std::cout << "Summarnaya viruchka"<<s << std::endl;
}

//Константы клавиш. На самом деле, их проще определять экспериментально, чем-то вроде std::cout << getch()
const int ESC_key = 27;
const int SPACE_key = 32;
const int ENTER_key = 13;

const int LEFT_key = 75; //Да-да, такой же, как K. Их можно различить, но пока фиг с ним
const int RIGHT_key = 77;
const int UP_key = 72;
const int DOWN_key = 80;

int main(void){
  ToolBooth k;
  while(true)
  {
    switch (getch())
    {
    case ESC_key: 
      k.Display(); 
      return 0;
    
    case LEFT_key: k.PayingCar(); break;
    case RIGHT_key: k.NopayCar(); break;
    }
  } 
}
Код:
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

class ToolBooth 
{
private:
  unsigned int a; // chislo avtomobilei
  double s; //summarnaya viruchka
public:
 ToolBooth(void): a(0), s(0)
 {}
 void PayingCar(void)
 { ++a, s += 0.5f;
}
 void NopayCar(void)
 
      {
 ++a;
}
 void Display(void) const;

}; 
      void ToolBooth::Display(void) const
 {    
  std::cout << "Chislo avtomobilei" <<a << std::endl;
  std::cout << "Summarnaya viruchka"<<s << std::endl;
}
const int LEFT_key = 75; 
const int RIGHT_key = 77;
int main(void){
    ToolBooth k;
     while(true)
     {
        switch (getch())
    { case 27: k.Display(); 
     
    return 0;
    
    case LEFT_key: k.PayingCar(); break;
    case RIGHT_key: k.NopayCar(); break;
         }
      } 
      }
Diana528 вне форума Ответить с цитированием
Старый 21.02.2013, 18:55   #63
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

проблема, консоль не выводит ничего
Diana528 вне форума Ответить с цитированием
Старый 21.02.2013, 19:02   #64
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

После нажатия [Esc]?
Abstraction вне форума Ответить с цитированием
Старый 21.02.2013, 19:16   #65
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

после нажатия стрелок
Diana528 вне форума Ответить с цитированием
Старый 22.02.2013, 10:39   #66
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Так и не должно. Сейчас после нажатия стрелки влево вызывается только метод PayingCar, а он, как можно видеть, ничего на экран не выводит.
Вы, впрочем, можете добавить в метод ещё инструкцию, вывод сообщения вида "проехала заплатившая машина":
Код:
  void PayingCar(void)
  {
    ++a, s += 0.5f;
    std::cout << "Paying car. Good." << std::endl;
  }
Ну, и в NopayCar() аналогично.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 13:05   #67
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

спасибо Вам огромное за помощь))))
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 13:53   #68
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Проверьте пожалуйста программу, что то не хочет работать.
Код:
#include <iostream>
#include <cstdlib>
#include <time.h>


using namespace std;

void main()
{
    int res; // proizvedenie
    int otv; // otvet polzovatelya
    int i; // scetchik ciklov
    int kol=0; // kol-vo prav otv
    int numb1, numb2; // somnojiteli
    time_t t;
   
    
    cout<<"Proverka znaniya tablici umnojeniya";
    cout<<"Dlya prodoljeniya najmite Enter";
    
    
    for (i=1; i<=10; i++)
    {
        numb1=rand()%7+2;
        numb2=rand()%7+2;
        
        res= numb1*numb2;
        cout<<"%i*%i= "<<numb1<<numb2;
        cin>>"%i">>otv;
        
        if (otv==res)
        kol++;
    
    else
    cout<<"ne verno! %i*%i=%i\nProdoljim...\n"<<numb1<<numb2<<res;
}

cout<<"\nPravelnii otvet: %i\n"<<kol;
cout<<"Vasha ocenka: ";

switch (kol)
{
       case 10: cout<<"otl";break;
       case 9: cout<<"hor";break;
       case 8: cout<<"udv";break;
       case 7: cout<<"ploho";break;
       case 6: cout<<"perezdacha";break;
       
       default: cout<<"nezachet";break;
       }
      getch();
    
}
Diana528 вне форума Ответить с цитированием
Старый 01.03.2013, 14:03   #69
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Новые, не связанные с предыдущими вопросы обычно стоит задавать в новых темах.

"Не хочет работать" - это бьётся в припадке, колотит соседние файлы и орёт "Не буду работать! Не буду! Не буду-у-у..."
Или всё-таки нежелание работать проявляется в виде каких-то конструктивных симптомов?

Если что, %i - это спецификатор для printf(), в силу особенностей его работы. std::cout выводит строки и переменные как есть:
Код:
//cout<<"%i*%i= "<<numb1<<numb2;
cout << numb1 << "*" << numb2 << "= ";
//cin>>"%i">>otv;
cin >> otv;
P.S. И да, всё-таки, привыкните использовать std::endl вместо "\n". При выводе в файл разница может стать заметной.

Последний раз редактировалось Abstraction; 01.03.2013 в 14:06.
Abstraction вне форума Ответить с цитированием
Старый 01.03.2013, 14:32   #70
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

67 C:\Dev-Cpp\include\c++\3.4.2\cstdlib:52, from C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo base.h In file included from C:/Dev-Cpp/include/c++/3.4.2/cstdlib:52, from C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algobase.h
Diana528 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в C++ Etete Помощь студентам 0 21.05.2012 21:36
Программа на С#. Классы MarihuanaP Фриланс 12 14.12.2011 05:48
С++,ООП,программа на классы VampIrchik Помощь студентам 1 25.01.2011 20:11
Классы в С++ Stager Помощь студентам 4 05.05.2009 10:05