Autor Tópico: Limpar console e entrada iterativa  (Lida 3177 vezes)

Offline kcnp

  • Usuário Ubuntu
  • *
  • Mensagens: 88
    • Ver perfil
Limpar console e entrada iterativa
« Online: 22 de Abril de 2008, 01:30 »
Gente, eu gostaria de um algoritmo em c para a limpeza do console usando c padrão e não ncurses. Além disso também não quero um que utilize a função system, visto que mesmo ela sendo padrão, os comandos de console pra limpeza variam em cada sistema operacional. Eu sei que da pra fazer alguma com o caractere ASCII do backspace, mas não tenho a minima ideia de como seria o criterio de parada de um loop para limpesa usando o caractere ASCII que representa o backspace.

Alem do mais eu gostaria de um algoritmo usando c padrão que fizesse entrada iterativa, ou seja, que o usuário não tem que apertar enter depois de entrar com um caractere(ou seja, assim que a tecla for pressionada o programa já detecta ela e faz a ação, sem a necessidade do enter pelo usuário).
kcnp

Offline kcnp

  • Usuário Ubuntu
  • *
  • Mensagens: 88
    • Ver perfil
Re: Limpar console e entrada iterativa
« Resposta #1 Online: 18 de Junho de 2008, 01:28 »
Gente, olha o que eu consegui fazer para a limpeza do buffer. Eu utilizei um conhecimento que ganhei pesquisando sobre a estrutura _IO_FILE do qual stdin é uma variável. Percebam que "_IO_read_ptr" é uma variável do tipo char* que aponta para a posição corrente na leitura do stdin e "_IO_read_end" é o final da area de obtenção de dados.
Vejam esse link:
http://www.di.ubi.pt/~fsilva/prog/Prog_Cap10.pdf

Código: [Selecionar]
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv)
   {
    char teste[4];
   
    printf("Entre com um string(com mais de 3 caracteres para testar a limpesa de buffer)\n");
    scanf("%3s",teste);
    printf("Entrada recebida por teste: ""%s""\n",teste);

    stdin->_IO_read_ptr=stdin->_IO_read_end;/*Limpeza do buffer*/
   
    printf("Entre com uma string de 3 caracteres e veja que ela é que recolhida na string teste\n");
    scanf("%3s",teste);
    printf("Entrada recebida por teste: ""%s""\n",teste);
   
    return 0;
   }

PS:Não testei esse código em windows. Testei só no linux. Não sei se a estrtura "_IO_FILE" é implementada com os mesmos campos lá.
« Última modificação: 18 de Junho de 2008, 20:36 por kcnp »
kcnp