Avatar billede jens87 Nybegynder
08. april 2003 - 12:11 Der er 9 kommentarer og
1 løsning

udskrive noget andet end man taster i konsollen

Jeg er rimeligt ny i C.
Jeg koder en console-application.
Jeg vil gerne have det til at at gøre nogenlunde følgende:
Når jeg trykker på en tast (altså skriver et bogstav eller et tal), skal den skrive noget andet i konsollen end bare den tast jeg trykker på.
Eksempelvis trykker jeg på "f"-tasten, skal den ikke bare skrive "f" i konsollen, men fx. "fff"(altså 2 gange den tast jeg tastede(- vil så give "hhh" hvis jeg trykker på "h"-tasten)). Programmet skal desuden kunne modificeres så det skriver "f12" når jeg trykker på "f"-tasten (og i samme stil "h12" hvis jeg trykker på "h"-tasten).

Jeg forestiller mig lidt det kan gøres ved noget "printf()"- eller "putchar()"-noget.

Håber i kan hjælpe, på forhånd tak!

/jens87

p.s. jeg har kun givet 15 point, da jeg tror at det ikke er så svært hvis man er lidt vil til C :>

p.p.s jeg er ikke interesseret i svar i C++ eller C#, kun C ;)
Avatar billede arne_v Ekspert
08. april 2003 - 12:32 #1
Noget i retning af:

#include <conio.h>

...

int k;

...

k = getch();

switch(k) {
  case 'f':
      putchar('f');
      putchar('fx');
      break;
...
}

...
Avatar billede arne_v Ekspert
08. april 2003 - 12:33 #2
Hele tricket er at få læse karaktererne uden ekko. Så er det jo
ikke noget problem at skrive det man vil.

getch kan læse uden ekko.
Avatar billede olennert Nybegynder
08. april 2003 - 12:34 #3
#include <stdio.h>

int main() {
  char c;
  while ((c = getchar()) != EOF)
    printf("%c%c%c", c, c, c);
}

Har det problem at den først læser tegnet efter du har trykket retur. Men at kunne læse tasterne direkte er platformafhængigt. Under UNIX (inklusiv Linux) kunne du kigge på curses.
Avatar billede olennert Nybegynder
08. april 2003 - 12:35 #4
Arne> conio.h, er det noget DOS-noget?

Nu har jeg for en gangs skyld taget mig sammen og læst spørgsmålet nogenlunde grundigt, og så kommer du  mig selvfølgelig i forkøbet :-)
Avatar billede arne_v Ekspert
08. april 2003 - 12:46 #5
conio.h er en arv fra diverse gamle 16 bit DOS compilere.

Det indeholder klassikere som kbhit og getch.

getch adskiller sig fra getchar ved at:
  - den ikke echo'er det man taster
  - at man ikke behøver taste retur

(kbhit siger vist sig selv)
Avatar billede jens87 Nybegynder
08. april 2003 - 14:00 #6
tak for svarene, jeg jeg afprøver lige dem begge når jeg får tid senere i dag :D
Avatar billede jens87 Nybegynder
09. april 2003 - 08:29 #7
arne får pointsne...det olennert skrev virker først når man trykker på entertasten (som han også nævnte...;-)

et andet problem er dog at få det til at virke med store bogstaver (S, H, G osv..;) - det havde jeg ikke spurgt om, men hvis i har nogle ideer til det kunne det være rart at høre :D

noget andet lidt "sjovt" er at det faktisk virker uden at jeg inkluderer conio.h...forstår du/i det?
Avatar billede arne_v Ekspert
09. april 2003 - 08:32 #8
Hvis store bogstaver skal virke ligesom små er det så ikke bare:

#include <conio.h>

...

int k;

...

k = getch();

switch(k) {
  case 'f':
  case 'F':
      putchar('f');
      putchar('x');
      break;
...
}

...

?
Avatar billede arne_v Ekspert
09. april 2003 - 08:33 #9
Hvis det virker uden eksplicit include af conio.h så bør du få compile warnings
medmindre conio.h inkluderes i en anden .H fil som du inkluderer
(og det kan sagtens tænkes - sommetider er include hirakiet ret
komplekst).
Avatar billede jens87 Nybegynder
09. april 2003 - 08:56 #10
jeg tror at der er en anden headerfil der har funktionen eller inkluderer conio.h eller noget, for jeg får ingen compilerwarnings ;) - mht. koden, så prøver jeg det lige senere :>
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