1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

getchar sem pausa

Discussão em 'Programação' iniciada por rmscouto, 27 de Março de 2008. (Respostas: 4; Visualizações: 1156)

  1. rmscouto

    rmscouto Power Member

    Boas!

    Mais uma vez venho recorrer aos conhecimentos da comunidade techzone, desta vez em programação....
    É o seguinte, estou a fazer um programa em C onde uso um getchar dentro de um ciclo, mas preciso que o getchar não interrompa a execção e continue o ciclo (e obviamente leia uma tecla s premida). p.e.:

    Código:
    while(c!='q')
         {c=getchar();
           i++;
          }
    
    
    Assim, ficaria com uma funcionalidade como o getChar de haskell. Sei que ha maneira de o fazer, mas nao sei como...
    alguém me pode ajudar pf?
    obrigado desde já por terem lido a duvida! :D
     
  2. XpiritO

    XpiritO Power Member

    Não sei se é isto que pretendes, mas cá vai...

    Código:
    bool c = false;
    char[SIZE] ch;
    int i = 0;
    while(!c){
       while( ch = getchar() != -1 ){
         if( ch == '|' ) { //quando for detectado o carácter '|', é terminada a inserção
           c = true;
           continue;
         }
         else {
            if( i < SIZE )
              char[i++] = ch;
            else
              break;
         }
       }
    }
    A variável SIZE pode ser de ambiente ou definida por ti, com uma dimensão máxima que entendas pertinente para o "contentor". A partir da dimensão máxima ou caso chegue ao final do ficheiro (o o valor -1 corresponde a "fim de ficheiro" - EOF), as teclas deixarão de ser consideradas e o ciclo "quebra".
     
  3. rmscouto

    rmscouto Power Member

    não é bem isso...vou tentar explicar melhor:

    neste ciclo:

    Código:
    while(c!='q')
      {c=getchar();
        i++;
      }
    
    ao chegar ao getchar, a execução é parada a espera de um caracter. Eu pretendo que a execução continue independentemente de ter ou não clicado uma tecla,mas se for premida uma tecla, que seja lida...o conteúdo do ciclo é irrelevante, o que importa msm é que não pare no getchar...
    Seguindo a tua ideia XpiritO, ao chegar a

    Código:
    while(ch = getchar() != -1)
    o programa para...que é o que eu queria que nao acontecesse... :005:
    mx obrigado pela ajuda!

    resolvido:
    http://www.fedoraforum.org/forum/showpost.php?p=742890&postcount=14
    --
    Obrigado XpiritO pela ajuda
    abraço
     
    Última edição: 27 de Março de 2008
  4. Aparicio

    Aparicio /dev/mod
    Staff Member

    A função kbhit() da biblioteca conio.h (windows) faz isso que queres.
     
  5. oi,

    Utiliza a função getch() ou _getch () (vai depender do compilador que tiveres a usar, a primeira pode dar-te alguma mensagem de warning decreptead!)

    Acho que é isto que procuras, pelo menos foi o que eu percebi!

    Espero ter ajudado

    cumps,
     

Partilhar esta Página