Avatar billede mortenhest Nybegynder
05. juni 2003 - 17:26 Der er 6 kommentarer og
1 løsning

Escape skal bruges til at hoppe ud af menuer

Se http://www.eksperten.dk/spm/361087 for første spørgsmål

Ja det er jo dejligt at jeg fik det til at virke med cout,
men med cin går der L*** i den, da escape tasten bruges til at slette den linje man er ved at skrive. Den kan så ikke bruges i den anden sammenhæng (eller hvad), nogen forslag til hvilken tast jeg ellers skal bruge til at hoppe ud af menuer (backspace og tab, bruges også i forbindelse med cin.)
Avatar billede arne_v Ekspert
05. juni 2003 - 17:32 #1
Jeg tror ikke at C++  cin og conio.h funktionerne kbhit
og getch kan sameksistere.

Kan du ikke konsekvent bruge getch til input ?
Avatar billede mortenhest Nybegynder
05. juni 2003 - 17:35 #2
jeg er ikke sikker på jeg ved havd du mener
Avatar billede arne_v Ekspert
05. juni 2003 - 17:38 #3
Og jeg er ikke sikker på at jeg ved hvad du mener.

Men for at give lidt fælles babbgrund, så prøv og se følgende
lille eksempel:

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

void undermenu()
{
  int done = 0;
  while(!done) {
      puts("Undermenu:");
      puts("  1: ok");
      puts("  ESC : exit");
      switch(getch()) {
        case '1':
            puts("OK");
            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();
}
Avatar billede mortenhest Nybegynder
05. juni 2003 - 17:45 #4
den er jeg med på..
men hvis man i et menuvalg ( f.eks istedet for undermenu) kalder er en funktion der hedder opretBruger() her skal der så tastes 10 oplysninger om en bruger(objekt).
eks
cout<<"Fornavn : "
cin>>nybruger.member_def.Fornavn;
cout<<"Efternavn : ";
osv osv

Jeg vil så gerne have at man skal kunne afbryde "indtastningsprocessen"
hvornår man vil med escape eller en anden tast.
Avatar billede arne_v Ekspert
05. juni 2003 - 18:00 #5
Det er ved at være mange år siden jeg har lavet den slags.

Måske noget a la:

#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();
}
Avatar billede mortenhest Nybegynder
05. juni 2003 - 20:51 #6
det er i orden, endnu engang tak for hjælpen, svar igen for at få point
Avatar billede arne_v Ekspert
05. juni 2003 - 20:53 #7
svar
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