Avatar billede nomak Nybegynder
10. juni 2003 - 22:26 Der er 12 kommentarer og
2 løsninger

input mens en while løkke kører?

Hey E!

Jeg har et server program kørernde på min UNIX spand!

Nu vil jeg så gerne lave så man kan give den input fra selve programmet!

dvs:

while(1) {
  //lav det den skal her..
}


og imens lytte efter input fra programmet.. ved ikke om det kan lade sig gøre..
Avatar billede arne_v Ekspert
10. juni 2003 - 22:30 #1
Du spørger efter kbhit & getch på Unix ?
Avatar billede arne_v Ekspert
10. juni 2003 - 22:32 #2
Se f.eks. kb_getc i http://www.pwilson.net/kbhit.html
Avatar billede nomak Nybegynder
10. juni 2003 - 22:32 #3
Det jeg spørger efter er hvor jeg skal placere det i forhold til min while løkke.. ?
Avatar billede arne_v Ekspert
10. juni 2003 - 22:33 #4
Avatar billede arne_v Ekspert
10. juni 2003 - 22:34 #5
Placeringen er ikke noget problem:

while(1)
{
  // gør noget
  if(kbhit())
  {
      char c = getch();
      // process c
  }
  // gør noget
}
Avatar billede nomak Nybegynder
10. juni 2003 - 22:38 #6
/tmp/ccmIN1bj.o: In function `main':
/tmp/ccmIN1bj.o(.text+0xd): undefined reference to `kbhit'
/tmp/ccmIN1bj.o(.text+0x18): undefined reference to `getch'
Avatar billede arne_v Ekspert
10. juni 2003 - 22:40 #7
Du skal have fat i en kbhit til Linux !

Se f.eks. mit andet link for kode.
Avatar billede nomak Nybegynder
10. juni 2003 - 22:52 #8
nu spørger jeg måske dumt, men hvordan linker jeg den fil sammen med mit projekt?


-bash-2.05b$ cc -o test -lm -lz test.c -lkbhit
/usr/libexec/elf/ld: cannot find -lkbhit
-bash-2.05b$

har compilet kbhit!
Avatar billede arne_v Ekspert
10. juni 2003 - 22:54 #9
cc -c -lm -lz test.c -o test.o
cc -c -lm -lz kbhit.c -o kbhit.o
cc -lm -lz test.o kbhit.o -o test
Avatar billede arne_v Ekspert
10. juni 2003 - 22:55 #10
-c betyder compile only

og jeg bruger altid cc til at linke med (ld er ikke til at finde ud af)

PS: du har husket at slette main fra den Ålborg kode ?
Avatar billede arne_v Ekspert
10. juni 2003 - 22:56 #11
NB: jeg går i seng nu. Jeg ligger et svar så du kan give mig nogle point, hvis
    det kommer til at virke som du vil have det til.
Avatar billede nomak Nybegynder
12. juni 2003 - 11:33 #12
Nu har jeg prøvet mig lidt frem..

-----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>

unsigned char kb_getc(void)
{
  unsigned char ch;
  ssize_t size;

  size = read (0, &ch, 1);
  if (size == 0)
  {
    return 0;
  }
  else
  {
    return ch;
  }
}


int main()
{
    unsigned char ch;

    while(1)
    {
        if(kb_getc())
        {
            ch = kb_getc();
            printf("%c\n", ch);
        }

    }
    return 1;
}
-----

-bash-2.05b$ cc -o test test.c
-bash-2.05b$ ./test
hejsa <-- input
e
s
[2 linebreaks]

havde godt nok forventet at få samme output som input?
Avatar billede segmose Nybegynder
12. juni 2003 - 12:11 #13
Din første kb_getc spiser hver anden char.

while(1)
    {
        if(ch = kb_getc())
        {
            printf("%c\n", ch);
        }

    }
Avatar billede nomak Nybegynder
12. juni 2003 - 12:52 #14
jeg takker for alt jeres hjælp! :)

20 til arne_v og 10 til segmose :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester