Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Часы 
:(
    Опции темы
ShadowC
Дата 25.10.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



вот пришла в голову идея написать часы в командной строке,вследствие этого возникло 2 вопроса...
1. как удалить предыдущее значение и заменить его на следующие? ну тоесть в командной строке обычно следующий результат показывается без удаления предыдущего,вот надо это дело как-то пофиксить
2. как изменить размер чисел?
PM MAIL   Вверх
newbee
Дата 25.10.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(ShadowC @  25.10.2011,  18:48 Найти цитируемый пост)
1. как удалить предыдущее значение и заменить его на следующие? ну тоесть в командной строке обычно следующий результат показывается без удаления предыдущего,вот надо это дело как-то пофиксить
Грубо - printf("\r\t\t\t\t\t\t\t\t\t\r"); изящно через всякие библиотеки вроде ncurses.

Цитата(ShadowC @  25.10.2011,  18:48 Найти цитируемый пост)
как изменить размер чисел? 
Что есть размер числа?



--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 25.10.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1. Вернуть курсор на одну позицию назад можно выведя символ с '\b' (backspace), соответственно, чтобы переместить курсор на 2 позиции, необходимо вывести "\b\b"
2. Что значит "размер чисел"? printf("%02d:%02d:%02d", h, m, s); или cout << setw(2) << setfill('0') << h << setw(1) << ':' << setw(2) << m << setw(1) << ':' << setw(2) << s;
Тебе еще понадобится принудительный вывод текста на консоль: fflush(stdout) или cout << flush;
PM   Вверх
ShadowC
Дата 25.10.2011, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



самое главное,а как задать счетчик времени? ну что бы он правильно работал 1 секунда 1 тик
PM MAIL   Вверх
newbee
Дата 25.10.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(ShadowC @  25.10.2011,  20:51 Найти цитируемый пост)
самое главное,а как задать счетчик времени? ну что бы он правильно работал 1 секунда 1 тик 

Код

for(...){
 ...
 sleep(1);}



--------------------
You're face to face
With man who sold the world
PM   Вверх
ShadowC
Дата 25.10.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 23.6.2011

Репутация: нет
Всего: нет



sleep(1) тоесть эта функция обеспечивает задержку а аргумент внутри скобок время задержки измеряемое в секундах,правильно?
PM MAIL   Вверх
fish9370
Дата 25.10.2011, 20:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



зная твою любовь к виндовой консоли, я порылся в своих старых исходниках и откопал тебе это
что касается вопроса как задать счетчик времени - получай текущее время и выводи его в консоль. Не пытайся его считать по таймерам - оно будет не точным..

Код

#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <dir.h>
#include <windows.h>
#include <conio.h>
#include <vcl.h>

//---------------------------------------------------------------------------

#pragma hdrstop

#define MAXCOMLEN 255
#define MAXPARAMLEN 255
  char command[MAXCOMLEN]="";
  char originalcom[MAXCOMLEN]="";
  char param[MAXPARAMLEN]="";
  AnsiString Message;

//---------------------------------------------------------------------------
class Console
{
  //private:
  public:
    HANDLE hConsoleOutPut;
    HANDLE hConsoleInPut;
    BOOL bCursorFlag;
  public:
       Console();
#define STDCON 1
       Console(BYTE ConType);
  void CharXY(BYTE x, BYTE y, char c);
  void Char(char c);
  void AttrXY(BYTE x, BYTE y, WORD attr);
  void SetCursorSize(BYTE size);
  void ChangeCursorVis();
  void WriteXY(BYTE x, BYTE y, char *sString);
  void Write(char *sString);
  void CLS();
  void SetCP(WORD page);
  void SetTitle(char *sTitle);
  void Get(char* lpBuffer, BYTE lenght);
};
//---------------------------------------------------------------------------
Console::Console()
{
  hConsoleOutPut=CreateConsoleScreenBuffer(GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL);
  hConsoleInPut=CreateConsoleScreenBuffer(GENERIC_READ,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL);
  SetConsoleActiveScreenBuffer(hConsoleOutPut);
}
//---------------------------------------------------------------------------
Console::Console(BYTE ConType)
{
  switch (ConType)
  {
    case 1:
    {
      hConsoleOutPut=GetStdHandle(STD_OUTPUT_HANDLE);
      hConsoleInPut=GetStdHandle(STD_INPUT_HANDLE);
      bCursorFlag=TRUE;
    }
  }
}
//---------------------------------------------------------------------------
void Console::CharXY(BYTE x, BYTE y, char c)
{
  COORD CP;
  CP.X=x; CP.Y=y;
  WriteConsoleOutputCharacter(hConsoleOutPut,&c,1,CP,NULL);
}
//---------------------------------------------------------------------------
void Console::Char(char c)
{
  _CONSOLE_SCREEN_BUFFER_INFO csbi;
  GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi);
  WriteConsoleOutputCharacter(hConsoleOutPut,&c,1,csbi.dwCursorPosition,NULL);
  csbi.dwCursorPosition.X++;
  if(csbi.dwCursorPosition.X>csbi.dwSize.X || c=='\n')
    {
      csbi.dwCursorPosition.X=0;
      csbi.dwCursorPosition.Y++;
    }
  SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition);
}
//---------------------------------------------------------------------------
void Console::AttrXY(BYTE x, BYTE y, WORD attr)
{
  COORD CP;
  CP.X=x; CP.Y=y;
  WriteConsoleOutputAttribute(hConsoleOutPut,&attr,1,CP,NULL);
}
//---------------------------------------------------------------------------
void Console::SetCursorSize(BYTE size)
{
  _CONSOLE_CURSOR_INFO cci;
  cci.dwSize=size;
  cci.bVisible=bCursorFlag;
  SetConsoleCursorInfo(hConsoleOutPut,&cci);
}
//---------------------------------------------------------------------------
void Console::ChangeCursorVis()
{
  _CONSOLE_CURSOR_INFO cci;
  cci.dwSize=20;
  cci.bVisible=bCursorFlag^=TRUE;
  SetConsoleCursorInfo(hConsoleOutPut,&cci);
}
//---------------------------------------------------------------------------
void Console::WriteXY(BYTE x, BYTE y, char *sString)
{
  _CONSOLE_SCREEN_BUFFER_INFO csbi;
  GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi);
  while(*sString)
  {
    if(x>csbi.dwSize.X || *sString=='\n')
    {
      x=0;
      y++;
    }
    if(*sString=='\n')
    {
      sString++;
      continue;
    }
    CharXY(x++,y,*sString++);
  }
}
//---------------------------------------------------------------------------
void Console::Write(char *sString)
{
  _CONSOLE_SCREEN_BUFFER_INFO csbi;
  GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi);
  while(*sString)
  {
    if(csbi.dwCursorPosition.X>csbi.dwSize.X || *sString=='\n')
    {
      csbi.dwCursorPosition.X=0;
      csbi.dwCursorPosition.Y++;
    }
    if(*sString=='\n')
    {
      sString++;
      continue;
    }
    CharXY(csbi.dwCursorPosition.X++,csbi.dwCursorPosition.Y,*sString++);
  }
  SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition);
}
//---------------------------------------------------------------------------
void Console::CLS()
{
  _CONSOLE_SCREEN_BUFFER_INFO csbi;
  GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi);
  csbi.dwCursorPosition.X=0;csbi.dwCursorPosition.Y=0;
  FillConsoleOutputCharacter(hConsoleOutPut,' ',csbi.dwSize.X*csbi.dwSize.Y,csbi.dwCursorPosition,NULL);
  SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition);
}
//---------------------------------------------------------------------------
void Console::SetCP(WORD page)
{
  SetConsoleCP(page);
  SetConsoleOutputCP(page);
}
//---------------------------------------------------------------------------
void Console::SetTitle(char *sTitle)
{
  SetConsoleTitle(sTitle);
}
//---------------------------------------------------------------------------
void Console::Get(char* lpBuffer, BYTE lenght)
{
  ReadConsole(hConsoleInPut,lpBuffer,lenght,(unsigned long*)lpBuffer,NULL);
}
//---------------------------------------------------------------------------
//###########################################################################
//---------------------------------------------------------------------------
bool compare(char *str1, char *str2)
{
  while(*str1++==*str2++  && *str1);
  if(*str1!=*str2) return false;
  return true;
}
void clear(char *str, BYTE lenght)
{
  for(BYTE i=0;i<lenght;i++)
    str[i]=0;
}
void copystr(char *src, char *dest)
{
  while(*src)
    *dest++=*src++;
}
int lenght(char *str)
{
  int i=0;
  while(*str++) i++;
  return i;
}
void trim(char* str)
{
  //
}
int pos(char* lpszStr, char* lpszSubStr,int nStartPos)
{
  int i;
  for(i=0;lpszStr[i]!=0;i++);
  if(nStartPos>=i) return -1;

  int nLenght,nCount=0;
  for(i=0;lpszSubStr[i]!=0;i++);
  nLenght=i;
  for(i=nStartPos;lpszStr[i]!=0;i++)
  {
    if(lpszStr[i]==lpszSubStr[nCount])
      while((lpszStr[++i]==lpszSubStr[++nCount]) && (lpszStr[i]!=0));
    if (nCount==nLenght) return i-nLenght;
      else if(nCount>0)    i--;
    nCount=0;
  }
  return -1;
}
int entrance(char* lpszStr, char* lpszSubStr)
{
  int nCount=0;
  for(int i=0;pos(lpszStr,lpszSubStr,i)!=-1;nCount++)
    i=pos(lpszStr,lpszSubStr,i)+1;
  return nCount;
}
void uppercase(char *str)
{
  while(*str)
  {
    if(*str>='a' && *str<='z') *str=*str-32;
    str++;
  }
}
//---------------------------------------------------------------------------
//###########################################################################
//---------------------------------------------------------------------------
Console CON1(STDCON);
void prompt()
{
  char path[255];
  CON1.Char('A'+getdisk());
  CON1.Write(":\\");
  getcurdir(0,path);
  CON1.Write(path);
  CON1.Write(">");
}
//---------------------------------------------------------------------------
void translate(char *command, char *param)
{
  command[lenght(command)-2]=0;
  trim(command);
  int i=pos(command," ",0);
  if(i>0)
  {
    copystr(command+i,param);
    command[i]=0;
  }
  copystr(command,originalcom);
  uppercase(command);
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
  //for(int i=1;i<argc;i++)
    //printf((*(argv+i)));

  CON1.SetCP(1251);
  CON1.SetTitle("Љ®¬ ­¤­ п бва®Є ");
  CON1.Write("Microsoft Windows XP [Версия 5.1.2600]\n(C) Корпорация Майкрософт, 1985-2001.\n\n");

  while(1)
  {
    prompt();
    clear(command,MAXCOMLEN);
    clear(originalcom,MAXCOMLEN);
    clear(param,MAXPARAMLEN);
    CON1.Get(command,MAXCOMLEN);
    translate(command,param);
             //CON1.WriteXY(0,15,command);
             //CON1.WriteXY(0,16,param);
    if(compare(command,"EXIT")) return 0;
    if(compare(command,"CLS"))
    {
      CON1.CLS();
      continue;
    }
    //ShellExecute(CON1.hConsoleInPut,"open","ping","-t 127.0.0.1",NULL/*"%system root%"*/,SW_SHOWNORMAL);
    //WinExec(command, SW_SHOWNORMAL);
    //_STARTUPINFOA si;
    //CreateProcess("ping.exe","-t 127.0.0.1", NULL,NULL,FALSE,0,NULL,NULL,&si,NULL);

    if(lenght(command)>0)
    {
      Message=(AnsiString)"\"" + (AnsiString)originalcom + (AnsiString)"\""  + (AnsiString)" не явлеятеся внутренней или внешней\nкомандой, исполняемой программой или пакетным файлом.\n\n";
      CON1.Write(Message.c_str());
    }
  }
}
//---------------------------------------------------------------------------



PS и завязывай с виндой


--------------------
undefined
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.