Ir para o conteúdo
roger569

Ciclo que para quando carregarmos numa tecla

Mensagens Recomendadas

roger569

Queria fazer um ciclo que so parasse após carregarmos numa tecla, por exemplo:

while("Qualquer coisa que eu nao sei"){

printf("So para depois de carregarmos numa tecla qualquer");

}

Alguem consegue ajudar?

Editado por roger569

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Skun Fly

Seria algo assim?

#include <stdio.h>
int main()
{
while(!getchar()) //ciclo não acaba enquanto não for pressionada uma tecla
printf("Para parar o ciclo clique numa tecla!");
return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

A função getchar pára até que seja dado um input. Lê bem o link que te forneceram - falaram em getchar ou em kbhit?

You can use kbhit() to check if a key is pressed:

#include <stdio.h>
#include <conio.h> /* getch() and kbhit() */

int main()
{
   char c;

   for(;{
       printf("hello\n");
       if(kbhit()){
           c = getch();
           printf("%c\n", c);
       }
   }
   return 0;
}


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

roger569,

Se estiveres a utilizar Windows, a solução reforçada pelo thoga31 é a correcta. Se por acaso o programa precisa de funcionar em Linux, terás que investigar sobre como utilizar as funções tcgetattr e tcsetattr (header <termios.h>), ou então terás que te aventurar com a lib ncurses.

Tudo isto acontece porque o que estás a tentar fazer não diz respeito à linguagem C mas sim ao sistema no qual o programa corre. Por esse motivo, diferentes sistemas têm diferentes formas de aceitar input do utilizador (e diferentes formas de configurarmos esse processo).

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

como só foram apresentadas as seguintes soluções :

- ou tens o buffered and blocking input reading do scanf

- usa o ncurses ou os conio.h/<termios.h> (dependendo do SO)

eu apresento uma intermédia (código para linux mas fácil de portar ou usar para win32 (dependendo do compilador usado) :

// nao esquecer de linkar a biblioteca "pthread"
//
// exemplo : gcc -o test test.c -lpthread
#include <stdio.h>
#include <stdlib.h>

#include <pthread.h>

#define SECS 3
#define STEP 1

#define RUN 1
#define STOP 0

void * proc(void * data) {
int * run = (int *) data;
int count = 0;

while (*run == RUN) {
	if (count == 0)
		printf("doing stuff for %d seconds ...\n", SECS);

	sleep(STEP);
	count = count >= SECS - STEP ? 0 : count + STEP;
}

pthread_exit(NULL);
}

int main() {
pthread_t thread;
int run = RUN;

printf("starting worker thread ...\n");
pthread_create(&thread, NULL, proc, &run);

printf("waiting for input ...\n");
getchar();

printf("thread signal to stop\n");
run = STOP;

printf("waiting for thread to stop ...\n");
pthread_join(thread, NULL);

return 0;
}

podes testar que o thread auxiliar fica a ser executado enquanto o scanf bloqueia o thread principal.

continuas a ter de carregar esplicitamente na tecla de ENTER, mas como disse, é uma solução intermédia.


IRC : sim, é algo que ainda existe >> #p@p

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.