Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите оптимизировать код

379
20 марта 2005 года
Fima
109 / / 07.11.2002
Это под ДОС.
Идет ввод с клавиатуры. Необходимо сделать следующее:
Если нажата цифра, то далее вводятся только цифры, если бувка - только буквы.
Как сделать вместо "/", Esc как очитску экрана. Эта работа с кодами клавиш.... меня заканывает.
Вообщем, помогите с оптимизацией у упрощением моего боооольшого кода :))
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void ClearScreen(); //очистка экрана
void Entre();
void main()
{
    ClearScreen();
    Entre();
    getch();
}
void ClearScreen()
{
 char far *screen=(char far*)0xB8000000;
 for(int i=0;i<80*25;i++)screen[i*2]=' ';
 gotoxy(1,1);
}
void Entre()
{
  char k;
  int j=0;
  puts("*-ўл室, / - ®зЁбвЄ  ўў®¤ "); // "*" - выход; "/" - очистка
  puts("‚ўҐ¤ЁвҐ ⥪бв");
  k=getch();
  if(k<='9' && k>='0')
  {
    j=1;
  }
  else if((k>='A'&& k<='Z')||(k>='a'&&k<='z'))
  {
    j=2;
  }
  else
  {
    puts("Error!!!");
    exit(0);
    getch();
  }
  switch(j){
  case 1:
    met1:
        while(k!='*')
        {
            k=getch();
            if(k<='9' && k>='0')
            {
              printf("%c",k);
            }
            else if(k=='/')
            {
              printf("\r");
              delline();
              goto met1;
            }
        }
    break;
  case 2:
    met2:
        while(k!='*')
        {
            k=getch();
            if((k>='A'&& k<='Z')||(k>='a'&&k<='z'))
                printf("%c",k);

            else if(k=='/')
            {
             printf("\r");
             delline();
             goto met2;
            }
        }
    break;
  }
}
301
20 марта 2005 года
lord Kelvin
897 / / 08.11.2004
Ну... Примерно так можно сделать...
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void ClearScreen();
void Enter();

void main()
{
 ClearScreen();
 Enter();
 getch();
}

void ClearScreen()
{
 char far *screen=(char far*)0xB8000000;
 for(int i=0;i<80*25;i++){screen[i*2]=' ';screen[i*2+1]=7;}
 gotoxy(1,1);
}

void Enter()
{
 char qw,chs=0;
 char nums[]="0123456789";
 char smbs[]="abscdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQESTUVWXYZ.,?!'\":; ";
 do
 {
  qw=getch();
  if(qw==8||(qw==0&&getch()==75)){printf("\b \b");continue;}
  if(qw==0)continue;
  if(!chs)
  {
   if(strchr(nums,qw))chs=1;
   else if(strchr(smbs,qw))chs=2;
   else break;
  }
  if((chs==1&&strchr(nums,qw)||(chs==2&&strchr(smbs,qw))))printf("%c",qw);
 }while(qw!=13&&qw!=27);
 if(qw==13)printf("\n");
 else {delline();gotoxy(1,wherey());}
}

P.S. Жду вопросов.=)
379
20 марта 2005 года
Fima
109 / / 07.11.2002
Цитата:
Originally posted by lord Kelvin
Код:
do
 {
  qw=getch();
  if(qw==8||(qw==0&&getch()==75)){printf("\b \b");continue;}
  if(qw==0)continue;
  if(!chs)
  {
   if(strchr(nums,qw))chs=1;
   else if(strchr(smbs,qw))chs=2;
   else break;
  }
  if((chs==1&&strchr(nums,qw)||(chs==2&&strchr(smbs,qw))))printf("%c",qw);
 }while(qw!=13&&qw!=27);
 if(qw==13)printf("\n");
 else {delline();gotoxy(1,wherey());}
}



Прокомментируй...

301
20 марта 2005 года
lord Kelvin
897 / / 08.11.2004
Код:
do
 {
  qw=getch(); //Считываем символ
  if(qw==8||(qw==0&&getch()==75)){printf("\b \b");continue;} //Если это кнопка влево или бекспейс -
стираем последний введенный символ (меняем на пробел)
  if(qw==0)continue; //Если нажата управляющая клавиша F1-F12, кнопки - Начинаем цикл заново
  if(!chs) //Если chs не определен (введен первый символ)
  {
   if(strchr(nums,qw))chs=1; //Если символ есть среди массива с цифрами -
будем вводить числа
   else if(strchr(smbs,qw))chs=2; //Если с буквами - текст
   else break; //Иначе выходим
  }
  if((chs==1&&strchr(nums,qw)||(chs==2&&strchr(smbs,qw))))printf("%c",qw); //Если введена буква
или число - выводим на экран
 }while(qw!=13&&qw!=27); //Пока юзер не жмахнет Esc или Enter
 if(qw==13)printf("\n"); //Если Enter - переходим на следующую строку
 else {delline();gotoxy(1,wherey());} //Иначе затираем строку
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог