Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 08.04.2010, 20:20   #1
das Ma:dchen
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 12
По умолчанию проблема с функцией kbhit() и циклом for

Всем доброго времени суток!

Код:
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <ctime>
#include <conio>
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused

void result(int *);
int main(int argc, char* argv[])
{
   int sec1, sec2;
   struct tm *ptr;
   time_t it;
   int cl[4];

   it=time('\0');
   ptr=localtime(&it);
   sec1= ptr->tm_sec;
   for(int i=0, sec2= sec1;; i++) //---------Проверяем, сколько повторений цикла фор
   {                              //произойдет в 1 секунду
      it=time('\0');
      ptr=localtime(&it);
      sec2= ptr->tm_sec;
      if(sec1 != sec2)
      {
         cl[3]=i;
         break;
      }
   }
   
   cout << "нажмите любую кнопку, когда появится слово \"KLICk!\".\n";
   //---------проверять скорость реакции пользователя будем 3 раза.
   for(int i=0; i<3; i++)
   {
      //------как сделать, чтобы слово "KLICk!" появлялось не сразу, а с задежкой?
      for(int i=0; i<55000; i++);
      cout << "\nKLICk!\n";

      for(int j=0; ; j++)
      {
         if(kbhit())//------Почему на следующем повторении цикла фор функция kbhit()
         {          //продолжает возвращать заначение 1, если я повторно никакую кнопку
            cl[i]=j;//не нажимала?[/COLOR]
            break;
         }
      }
   }
   result(cl);

   return 0;
}
//---------------------------------------------------------------------------
void result(int *cl)
{
   double i1, i2 ,i3;
   i1= (double) cl[0]/cl[3];
   i2= (double) cl[1]/cl[3];
   i3= (double) cl[2]/cl[3];
   cout << "Ваши результаты:";
   cout << "\n" << i1 << ", " << i2 << ", и " << i3;

   cout << "\nСреднее: " << (i1 + i2 + i3)/3;
}
p.s.
Делаю первые шаги в С++. Поэтому, если что не так, не определяйте мои сообщения сгоряча в "шедевры"... Пожалуйста.
das Ma:dchen вне форума   Ответить с цитированием
Старый 08.04.2010, 21:13   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 943
По умолчанию

Цитата:
Сообщение от das Ma:dchen Посмотреть сообщение
Почему на следующем повторении цикла фор функция kbhit() продолжает возвращать заначение 1, если я повторно никакую кнопку не нажимала?
Потому что ф-я kbhit() только определяет, есть во входном потоке хотя бы один символ или нет. И всё! Ежели он (символ) там есть, kbhit() его не извлекает. Вместо
Код:
      for(int j=0; ; j++) {
         if ( kbhit() )//------Почему на следующем повторении цикла фор функция kbhit()
         {          //продолжает возвращать заначение 1, если я повторно никакую кнопку
            cl[i]=j;//не нажимала?[/color]
            break;
         }
      }
Напишите что-то такое:
Код:
      int j = 0;
      while ( !kbhit() ) 
         ++j;
      cl[i] = j;
      getch();
(о некорректности использования такого "таймера" - разговор отдельный ).

Да, и ради интереса... Чему в Борланде i равны при выполнениях этого
Код:
    cl[i] = j;
оператора?
Vago вне форума   Ответить с цитированием
Старый 09.04.2010, 12:44   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,997
По умолчанию

Цитата:
Сообщение от das Ma:dchen Посмотреть сообщение
как сделать, чтобы слово "KLICk!" появлялось не сразу, а с задежкой?
См. Sleep().
ds.Dante вне форума   Ответить с цитированием
Старый 09.04.2010, 16:08   #4
das Ma:dchen
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 12
По умолчанию

Спасибо большое! Я почти полностью переделала прог-у. Получилось более компактно, и результаты выглядят более реалистично. Сейчас выложить не могу: с телефона пишу. Дома буду - выложу.
das Ma:dchen вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с циклом удаления символа ArniLand Общие вопросы .NET 1 31.03.2010 23:16
Непонятная проблема с циклом RIO Общие вопросы Delphi 3 01.02.2010 00:29
Проблема с циклом, Паскаль Паскалька^^ Помощь студентам 2 10.12.2009 16:37
QBasic. Проблема с циклом и погрешностью Clericos Помощь студентам 4 30.11.2009 19:16
Проблема с циклом.. POPOV Помощь студентам 3 29.04.2008 18:36


11:11.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.