Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Death_Knight

[Dúvida] Como Apagar "última linha" inserida

Mensagens Recomendadas

Death_Knight

Boas isto é assim, ando a fazer um programa e logo no inicio do mesmo dou ao utilizador a escolher uma entre 3 opções, já está configurado para se o utilizador escolher um numero que nao se encontre nas opcoes o voltar a pedir, agora a minha dúvida é para fazer o seguinte:

Se o utilizador inserir números diferentes dos permitidos acontece por exemplo isto:

Insira um numero entre 0 e 3:

4

Insira um numero entre 0 e 3:

6

Insira um numero entre 0 e 3:

7

Insira um numero entre 0 e 3:

49

e por aí adiante, agora o meu objectivo era se o utilizador inseri-se um numero diferente dos pedidos, que em vez de escrever novamente uma linha com "Insira um numero entre 0 e 3:" fica-se lá apenas uma sendo que tivesse um efeito do género:

Insira um numero entre 0 e 3:  | -----> em vez de criar uma nova linha com esta afirmaçao repetida, esta afirmaçao ficasse estática até ser inserido o numero correcto

4                                             

espero ter-me feito entender

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous
#include <stdio.h>

int main(void) {
        int x;
        printf("Insira um numero entre 0 e 3: \n");
        do {
                scanf("%d",&x);
        } while (x<0 || x>3);
        return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Peterv5

Podes fazer também:

#include <stdio.h>

int main(void) {
        int x;
        do {
                printf("Insira um numero entre 0 e 3: \n");
                scanf("%d",&x);
                system("cls");
        } while (x<0 || x>3);
        return 0;
}

Atenção que o system("cls"); apagar tudo o que tens de momento na janela. Mas para melhores resultados tenta os dois e vê o que gostas mais, lol. Boa sorte.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Esse system("cls") é uma má prática, porque é uma chamada ao SO (que é mais pesada) e porque torna a aplicação dependente do SO onde está a correr. Para além do que o que tu fazes é imprimir sempre a frase (que é o que ele não quer), só que a apagas com o system("cls"). Ou seja, não é solução correcta.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Peterv5

Esse system("cls") é uma má prática, porque é uma chamada ao SO (que é mais pesada) e porque torna a aplicação dependente do SO onde está a correr. Para além do que o que tu fazes é imprimir sempre a frase (que é o que ele não quer), só que a apagas com o system("cls"). Ou seja, não é solução correcta.

Tens razão, tens razão. Só sugeri aquela forma para que assim não aconteça algo do género:

Insira um numero entre 0 e 3:
5
6
7
2

e ficar apenas a primeira frase e um numero. Mas o teu método parece mais próprio sim

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Tens razão, tens razão. Só sugeri aquela forma para que assim não aconteça algo do género:

Insira um numero entre 0 e 3:
5
6
7
2

e ficar apenas a primeira frase e um numero. Mas o teu método parece mais próprio sim

Mas foi exactamente isso que ele pediu. (pelo menos pareceu-me pela descrição da dúvida...)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Se bem percebi, o que ele quer é limpar a linha do resultado e voltar a escrever nessa linha enquanto o valor não for válido.

Tanto quanto sei, ou utilizas uma biblioteca que utilize as funcionalidades do S.O. para o qual compilas, ou utilizas funções específicas do S.O., ficando dependente deste.

De qualquer forma, fazer uma chamada externa para limpar o ecrã não é aconselhado, conforme o que disse o Baderous.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Peterv5

Se bem percebi, o que ele quer é limpar a linha do resultado e voltar a escrever nessa linha enquanto o valor não for válido.

Tanto quanto sei, ou utilizas uma biblioteca que utilize as funcionalidades do S.O. para o qual compilas, ou utilizas funções específicas do S.O., ficando dependente deste.

De qualquer forma, fazer uma chamada externa para limpar o ecrã não é aconselhado, conforme o que disse o Baderous.

Sim concordo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Death_Knight

Eu já tinha experimentado essa do system("cls") mas o problema é que limpa tudo o que ja tenho no ecra, porque eu antes do "Insira um numero entre 0 e 3:" tenho texto que não me dava jeito apager como o system("cls ") apaga

#include <stdio.h>

int main(void) {
        int x;
        printf("Insira um numero entre 0 e 3: \n");
        do {
                scanf("%d",&x);
        } while (x<0 || x>3);
        return 0;
}

[/size]

sim realmente isto já está mais proximo do que pretendo  ;) agora só queria saber se dá para fazer mais uma coisa, visto que ele no ecrã imprime p. ex:

Insira um numero entre 0 e 3:

4

5

6

fazer com que ao introduzir o "5" neste exemplo ele sobrepusesse ao "4", ou seja ficava apenas com uma linha a ser usada até ser introduzido um dos números correctos,

Obrigado desde já e cumprimentos

Death_knight

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

No código do Baderous, punhas o printf dentro do loop e no inicio do loop chamavas sempre uma função (criada por ti com um loop com muitos \n) e era isso.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

2 problemas aí:

- um loop com muitos \n era ineficiente. Um printf com muitos \n er melhor.

- mais importante, isso não resolvia o problema: ia apagar tudo o que estivesse no ecrã, e ainda ia escrever sempre no fundo da linha de comandos.

Pessoalmente, à falta de melhor, ficava com a solução do Baderous, nem que seja porque ao deixar o input anterior permite ver o erro cometido.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Ele não queria apagar tudo o que estivesse no ecrã? Acho que era isso.

Tens razão quando disseste que era ineficiente e que ia escrever no fim. Então, eu punha o printf dentro do loop e não fazia mais nada. Ou tinha mesmo de recorrer ao sistema.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Ele não queria apagar tudo o que estivesse no ecrã?

Não:

Eu já tinha experimentado essa do system("cls") mas o problema é que limpa tudo o que ja tenho no ecra, porque eu antes do "Insira um numero entre 0 e 3:" tenho texto que não me dava jeito apager como o system("cls ") apaga


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.