Americo Pereira Posted February 28, 2017 at 12:59 AM Report Share #602778 Posted February 28, 2017 at 12:59 AM (edited) Boas, decididamente optei por trabalhar com Linux, estou a desenvolver uma aplicação que corre em consola. Estou com alguns problemas iniciais e necessitava de ajuda numa questão que me anda a por os cabelos em pé. Em relação ao código que apresento quando digito 'ç' ou um carater com acento o cursor anda um espaço a mais, o controlador do teclado devolve dois inteiro distintos, deduzo que seja o buffer do teclado, alguém sabe como resolver esta questão? #include <cstdlib> #include <stdio.h> #include <string> #include <stdlib.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <string.h> #include <cstdlib> #include<stdlib.h> #include <stdio.h> #include <string.h> #include<iostream> #include<string> #define ENTER 10 #define ESC 27 #define BSP 127 using namespace std; /* * */ void gotoxy(int x, int y){ printf("%c[%d;%df",0x1b,y,x); } int GetKey(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return (int)ch; } int Get_text(int x, int y, int tam, char *texto){ int i = 0, num_carater = 0; bool sair = true; char carater; char str[250]; if (tam > 250) tam = 250; for (i=0;i<tam && texto!='\0';i++,num_carater++){ str=texto; } for (i=i; i<tam; i++){ str = '.'; } str[tam] = '\0'; do{ gotoxy(x, y); cout<< str; gotoxy(x + num_carater , y); carater = GetKey(); switch (carater){ case ENTER: for(i=0;i<num_carater;i++){ texto=str; } texto[num_carater]='\0'; for(i=i;i<tam;i++){ str=' '; } gotoxy(x, y); printf(str); return 1; break; case ESC: return 0; break; case BSP: if (num_carater > 0){ str[--num_carater] = '.'; } break; default: if(1){ //std::cout<<(int)carater; if (num_carater < tam){ str[num_carater] = carater; num_carater++; } } } } while (sair); return 0; } int main(int argc, char** argv) { char campo[20]={' \0'}; system("clear"); gotoxy(10,10); Get_text(10,20,10,campo); return 0; } Edited February 28, 2017 at 01:01 AM by Americo Pereira Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted February 28, 2017 at 06:56 AM Report Share #602780 Posted February 28, 2017 at 06:56 AM podes responder somente a duas questões ? - o que é que ese código deveria fazer ? - onde tiraste a ideia que eria dessa maneira ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Americo Pereira Posted February 28, 2017 at 08:43 AM Author Report Share #602781 Posted February 28, 2017 at 08:43 AM 1 hora atrás, HappyHippyHippo disse: podes responder somente a duas questões ? - o que é que ese código deveria fazer ? - onde tiraste a ideia que eria dessa maneira ? Bom dia Happy, obrigado pela atenção, respondendo ás tuas questões: 1- Pretendo editar uma ficha de cliente em modo consola em linux, tenho um classe edita, a qual tem vários métodos que permite editar um campo tipo inteiro, float, data, etc . deste modo posso controlar o tamanho do campo e os carateres permitidos. 2- Éra assim que eu fazia quando trabalhava com turbo c da borland na época de 90, MS DOS. existe outra maneira de o fazer? sei que posso usar o cin e depois fazer o teste para determinar se os carateres estão dentro do conjunto permitido, e como faço para quando o utilizador só pode escrever 10 carateres e carrega em 20 teclas, vai-me invadir zona da ficha que não devia. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted February 28, 2017 at 12:43 PM Report Share #602782 Posted February 28, 2017 at 12:43 PM hoje em dia não se reinventa a roda se pretende scriar alguma coisa semi-gráfica em consola, usa o ncurses IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Americo Pereira Posted February 28, 2017 at 04:52 PM Author Report Share #602786 Posted February 28, 2017 at 04:52 PM 4 horas atrás, HappyHippyHippo disse: hoje em dia não se reinventa a roda se pretende scriar alguma coisa semi-gráfica em consola, usa o ncurses Não pretendo inventar nada, simplesmente não sabia da existência de ncurses, vou analisar. Obrigado pela dica. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now