#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;
}
}
Помогите оптимизировать код
Идет ввод с клавиатуры. Необходимо сделать следующее:
Если нажата цифра, то далее вводятся только цифры, если бувка - только буквы.
Как сделать вместо "/", Esc как очитску экрана. Эта работа с кодами клавиш.... меня заканывает.
Вообщем, помогите с оптимизацией у упрощением моего боооольшого кода :))
Код:
Код:
#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());}
}
#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. Жду вопросов.=)
Цитата:
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());}
}
{
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());}
}
Прокомментируй...
Код:
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());} //Иначе затираем строку
}
{
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());} //Иначе затираем строку
}