Limpar console e entrada iterativa

Iniciado por kcnp, 22 de Abril de 2008, 01:30

tópico anterior - próximo tópico

kcnp

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

kcnp

#1
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

#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á.
kcnp