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

fjsmoreira

Duvida Em ciclo!!

5 mensagens neste tópico

Boa Tarde!!

Era o seguinte, estou a fazer o projecto de 1ºAno da universidade, e precisa de uma pequena ajuda.

Como posso eu fazer um ciclo infinito que não seja infinito?  :(

isto é, preciso que o ciclo nunca pare a não ser quando eu carregue numa tecla do computador.

Espero que me consigam ajudar...o projecto era para entregar ontem!  :fartnew2:

Abraços!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

for (; {
  /* resto do ciclo infinito, antes do teste */
  if (tecla_premida()) break;
  /* resto do ciclo infinito, depois do teste */
}

E a função `tecla_premida()` teria o seguinte protótipo:

/* devolve 0 se não houve/não está uma tecla premida;
* ou 1 se tiver havido/estiver uma tecla premida. */
int tecla_premida(void);

A definição propriamente dita da função `tecla_premida()` não é possível fazer sem saber muito mais do ambiente onde queres usá-la. Se for em Windows é duma maneira, se for em Linux é doutra; e se for para o microprocessador do meu frigorífico não é possível pois o meu frigorífico não tem teclas :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito Obrigado!!

mas....nao estou a entender mt bem...peço desculpa  :down:

o ambiente é windows.

mais uma vez, obrigado!

cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Como posso eu fazer um ciclo infinito que não seja infinito?  :(

Não percebi... foste muito rápido. :-P

isto é, preciso que o ciclo nunca pare a não ser quando eu carregue numa tecla do computador.

Um ciclo infinito em C fica assim:

for (; {
    // Código do ciclo aqui.
}

Dentro do ciclo, se executares um break, o ciclo sai.

Do entanto, para fazeres (uma coisa parecida com) o que queres, o melhor é mesmo:

fgetc(stdin);

Que só termina se premires ENTER (ou uma linha de texto seguida de um ENTER).

Se queres que ele termine mesmo com qualquer tecla, então é bem mais complicado, e nem seque é possível fazer de maneira portável. A biblioteca do C não está desenhada para esse tipo de interface tão interactivo.

No Linux, então, é uma seca... Tens de meter o terminal em raw mode (porque by default o terminal está em cooked mode, o que significa que o programa não "vê" nada do que tu digitas até premires enter).

Espero que me consigam ajudar...o projecto era para entregar ontem!

Projecto?

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado!! :( Era isso mesmo que eu queria....

:)

Ciclo infinito sem ser infinito... :D quando carregas ENTER deixa de ser infinito pois já acabou! :P

e essa do projecto, tenho um projecto para entregar ontem... mas precisa disso para por lá! ;)

Muito Obrigado mais uma vez. Abraço!

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