Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Death_Knight

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

Recommended Posts

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

Share this post


Link to post
Share on other 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;
}

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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...)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.