Avatar billede themepark Nybegynder
23. september 2005 - 13:04 Der er 7 kommentarer og
1 løsning

Reager på taster

Jeg ved sådan set allerede hvordan det gøres, i hvert fald virker det med getchar.

MEN problemet er dels, at den udskriver tegnet på skærmen, hvilket jeg ikke vil have programmet til. Dels at man skal trykke Return først, hvilket jeg heller ikke vil have den til. Og dels at jeg gerne vil have den til at reagere på hvert tastatur tryk, således at man ikke kan indtaste en længere streng, som den så analyserer, men i stedet for kun en tast ad gangen.

Er der nogle, der kan være behjælpelige med at forklare mig hvordan det gøres?
Avatar billede arne_v Ekspert
23. september 2005 - 13:07 #1
standard C har ikke den mulighed

der findes compiler/platform specifikke løsninger

hvis du har conio.h har du nok en getch funktion der gør hvad du ønsker
Avatar billede themepark Nybegynder
23. september 2005 - 14:28 #2
Hmm...er alle 3 ting da compiler/platform specifikke eller er der noget af det jeg kan lave uden det?
Avatar billede arne_v Ekspert
23. september 2005 - 15:04 #3
ingen echo = ikke standard
læse uden return = ikke standard
processe med det samme = følger med læse uden retur
Avatar billede themepark Nybegynder
23. september 2005 - 19:08 #4
Hmm okay. Men hvad er conio.h så? Ja en header fil og ja den har med input/output at gøre, så meget ved jeg. Men hvad er con da? Er den da platforms specifik?
Avatar billede arne_v Ekspert
23. september 2005 - 19:14 #5
conio.h er compiler & platform specifik - den findes til alle Windows compilere
som sætter en ære i at være kompatible med gamle DOS compilere

conio = console I/O
Avatar billede arne_v Ekspert
23. september 2005 - 19:15 #6
eksempel fra lageret:

#include <stdio.h>
#include <string.h>
#include <conio.h>

void undermenu()
{
  char prompt[] = "Enter data: ";
  char c,buffer[80];
  int i,ix;
  int done,done2;
  done=0;
  while(!done) {
      puts("Undermenu:");
      puts("  1: enter data");
      puts("  ESC : exit");
      switch(getch()) {
        case '1':
            for(i=0;i<strlen(prompt);i++) putch(prompt[i]);
            ix = 0;
            done2=0;
            while(!done2) {
                c=getch();
                switch(c) {
                  case '\x1b':
                      putch('\r');
                      putch('\n');
                      done2=1;
                      break;
                  case '\r':
                      buffer[ix]='\0';
                      putch('\r');
                      putch('\n');
                      puts(buffer);
                      done2=1;
                      break;
                  default:
                      putch(c);
                      buffer[ix]=c;
                      ix++;
                      break;
                }
            }
            break;
        case '\x1b':
            done=1;
            break;
      }
  }
}

void menu()
{
  int done = 0;
  while(!done) {
      puts("Menu:");
      puts("  1: undermenu");
      puts("  ESC : exit");
      switch(getch()) {
        case '1':
            undermenu();
            break;
        case '\x1b':
            done=1;
            break;
      }
  }
}

int main()
{
  menu();
  return 0;
}
Avatar billede themepark Nybegynder
23. september 2005 - 23:41 #7
Ah okay...så håber jeg bare den virker med gcc.

Nå, men smid et svar så :)
Avatar billede arne_v Ekspert
23. september 2005 - 23:44 #8
GCC på Windows (mingw) har den
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