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

Gangstar

tirar o: prima tecla para continuar

16 mensagens neste tópico

em todos os meus programas no fim aparece: prima tecla para continuar!

como tiro isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não usando o

System("pause");

e usando em vez disso

getchar();

Assim continuas a precisar de carregar numa tecla para terminar o programa, mas pelo menos a frase já não aparece.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em alternativa se usares linux o teu problema desaparece como que por mistério...  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol so instalo linux po mes ke vem kuando o novo pc xegar.

eu tirei o system e pus getchar e n funka

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O getchar pode ter um problema que é existir algum caractere no buffer.

Se quiseres podes utilizar o getch(), mas tens de colocar a biblioteca conio.h que não é standard, só funciona no windows.

Ou então limpas o buffer antes do getchar() com um fflush(stdin) que também não é standard

Ou ainda podes utilizar a função sleep(ms), para dar um time-out especifico, que vem na biblioteca time.h que também é restrita ao windows.

Pode parecer estranho mas como no linux o problema não existe só desenvolveram esta ferramentas para windows.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a correr o .exe em si ou a executar pelo IDE? Se estiveres pelo IDE experimenta correr o .exe e ve se ainda acontece. Existem IDE's que sempre que executas código por ele fazem com que isso apareça sempre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então limpas o buffer antes do getchar() com um fflush(stdin) que também não é standard

O fflush é standard.  :shocking:

#include<stdio.h>
int fflush(FILE *stream);

Eu diria que deves experimentar fazer o flush da stream stdin seguido do getchar():

fflush(stdin);
getchar();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já existe um tópico por isso, portanto sumariamente: fflush é standard mas o seu comportamento quando aplicado ao standard input (stdin) não está definido devendo portanto o seu uso restringir-se ao stdout/ficheiros de escrita. Existe mais informação noutro tópico.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já existe um tópico por isso, portanto sumariamente: fflush é standard mas o seu comportamento quando aplicado ao standard input (stdin) não está definido devendo portanto o seu uso restringir-se ao stdout/ficheiros de escrita. Existe mais informação noutro tópico.

Concordo contigo e não estava a pensar em debater o que acontece quando se usa um fflush ao standard input. Apenas queria dizer que pelo comportamento não estar definido à partida não significa que não se possa usar esta função. Pode-se usar o fflush(stdin) e verificar o inteiro retornado como forma de garantir que este flush teve pelo menos uma execução bem sucedida. Por exemplo, fazendo:

/* fflush(stream) retorna 0 se foi bem sucedido, ou EOF se gerou erro */
if(fflush(stdin)==0) 
{
getchar();
}

Por outro lado, não há nada melhor do que ver a documentação do compilador C que se estiver a usar e verificar de que forma está implementado o comportamento do fflush ao stdin, se é que está mesmo implementado de todo.

De qualquer forma, caso este flush cause erros no comportamento do programa em que está a ser usado, há sempre a hipótese de se usar um emulador de ambiente linux, como o cygwin por exemplo. Desta maneira podes compilar os teus programas e não ter essa string "prima tecla para continuar" de cada vez que o programa termina. Parece-me ser uma solução mais eficaz para este problema sem ter que programar a um nível mais avançado para contornar o comportamento do fflush(stdin).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode-se usar o fflush(stdin) e verificar o inteiro retornado como forma de garantir que este flush teve pelo menos uma execução bem sucedida. Por exemplo, fazendo:

/* fflush(stream) retorna 0 se foi bem sucedido, ou EOF se gerou erro */
if(fflush(stdin)==0) 
{
getchar();
}

mas o 'fflush' não falha, ele nem sequer tenta "limpar" o buffer pois não é essa a sua função. por isso esse código não vai servir de nada.

Por outro lado, não há nada melhor do que ver a documentação do compilador C que se estiver a usar e verificar de que forma está implementado o comportamento do fflush ao stdin, se é que está mesmo implementado de todo.

só uma correcção, não é ver a documentação do compilar, mas sim das bibliotecas (o compilador apenas gera o código, as bibliotecas é que definem o comportamento das funções).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em alternativa se usares linux o teu problema desaparece como que por mistério...  :biggrin:

Em Windows o problema também não acontece se correres o programa pela consola, tal como em Linux...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só uma correcção, não é ver a documentação do compilar, mas sim das bibliotecas (o compilador apenas gera o código, as bibliotecas é que definem o comportamento das funções).

Sim, obviamente que é o compilador que gera o código mas quando disse para se ver a documentação do compilador estava a pensar em que pode haver algum compilador que trate de alguma forma a questão de um fflush ao stdin. E isso provavelmente está na documentação do compilador.

http://www.cprogramming.com/faq/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351

As usual, there are some exceptions, check your compiler's documentation to see if it has a (non-portable) method for flushing input.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que faz fflush(Stdin) que n percebO? o que e limpar buffer do teclado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Basicamente, o fflush(stdin) limpa o buffer do teclado, e o buffer do teclado é espaço em memória usada para armazenar as informações (teclas) que passas (teclas) pelo teclado.

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em todos os meus programas no fim aparece: prima tecla para continuar!

como tiro isso?

Basta simplesmente antes da ulitima } pores:

System("pause >NULL");

Nao precisas andar com fflush(stdin)...

WS

0

Partilhar esta mensagem


Link 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