Avatar billede spectual Nybegynder
10. juli 2001 - 17:34 Der er 31 kommentarer og
1 løsning

scanf efterfulgt af getche problem

Følgende program volder mig nogle problemer:

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

void main () {

    char navn [50];

    printf (\"Tryk en tast!\"); getche();

    printf (\"\\nIndtast dit navn: \");

    scanf (\"%s\",&navn);

    printf (\"\\n%s\",navn);

}

Problemet er, at når man har trykket en tast, kommer denne tast med i scanf når den slippes.

Hvordan forhindrer man den i at gøre det?
Avatar billede mickni33 Nybegynder
10. juli 2001 - 18:49 #1
prøv i første omgang at skrive getch(); istædet for getche(); altså uden e til sidst.

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

void main () {

    char navn [50];

    printf (\"Tryk en tast!\");
  getch();

    printf (\"\\nIndtast dit navn: \");

    scanf (\"%s\",&navn);

    printf (\"\\n%s\",navn);

}
Avatar billede kamikaze Nybegynder
10. juli 2001 - 22:35 #2
Ved at indsætte en løkke, kan du \"æde\" alle tegn:

char key;
while (key != \'\') key = getch();
Avatar billede spectual Nybegynder
11. juli 2001 - 09:19 #3
Der egentlig ikke rigtig nogen af de 2 forslag, jeg kan bruge. Egentlig leder jeg jo bare efter en \"press any key\" funktion, som også tager højde for når tasten slippes.
Avatar billede jpk Nybegynder
11. juli 2001 - 09:27 #4
Hvordan \"kommer med\"?
Avatar billede spectual Nybegynder
11. juli 2001 - 09:33 #5
Den skriver tegnet når tasten slippes igen.
Avatar billede spectual Nybegynder
11. juli 2001 - 09:35 #6
Igennem mine egne undersøgelser har jeg da fundet ud af, at det åbenbart er et almindelig problem, men ingen rigtig har en endelig løsning.
Avatar billede jpk Nybegynder
11. juli 2001 - 09:39 #7
getche() giver echo til skærmen!!! (derfor e\'et til sidst i funktionsnavnet...)
Hvis du følger mickni33s løsning med at erstatte funktionskaldet getche() med getch(), skrives tegnet ikke ud til skærmen!
Avatar billede spectual Nybegynder
11. juli 2001 - 09:41 #8
Det er jo ikke noget du har prøvet, er det? Jeg har selvfølgelig prøvet begge dele og ingen af dem virker!
Avatar billede jpk Nybegynder
11. juli 2001 - 09:42 #9
jeg har selv lige prøvet!!! Det virker fint...
Avatar billede spectual Nybegynder
11. juli 2001 - 09:44 #10
Hvilken compiler bruger du?
Avatar billede spectual Nybegynder
11. juli 2001 - 09:45 #11
Kunne du evt. ikke lige sende getch() sourcekoden? Jeg formoder at den kan findes i conio.cpp
Avatar billede jpk Nybegynder
11. juli 2001 - 09:46 #12
Visual C++ compiler
Avatar billede spectual Nybegynder
11. juli 2001 - 09:48 #13
hmm... Da jeg prøvede det på med min (Visual C++ 6.0) virkede det ens med getch() og getche().
Avatar billede jpk Nybegynder
11. juli 2001 - 09:50 #14
Er du nu sikker på det er blevet recompiled?
Jeg bruger også VC++ 6.0...
Avatar billede spectual Nybegynder
11. juli 2001 - 09:53 #15
Ok.

Jeg har ikke VC++ 6.0 her. Kan ikke prøve at lave du versioner, een med getch() og een med getche() og sende dem til mig, så jeg kan se det virker.

I så fald vil jeg give dig pointene.
Avatar billede jpk Nybegynder
11. juli 2001 - 09:58 #16
OK, gi\' mig din e-mail adr., så sender jeg et par stykker.
Hvilket operativsystem bruger du forresten?
Avatar billede spectual Nybegynder
11. juli 2001 - 10:00 #17
klpe@aabc.dk

Adgang til både win2k, win98SE og win95. Programmet kommer til at skulle køre på en win98SE.
Avatar billede jpk Nybegynder
11. juli 2001 - 10:04 #18
De er sendt...
Jeg kører selv W2K her.
Hvis det virker bør du nok give pointene til mickni33, eftersom han svarede først...
Avatar billede spectual Nybegynder
11. juli 2001 - 10:06 #19
Jeg må konstatere, at det virker. Men der er vist noget galt med min egen VC++, for laver jeg det derhjemme, vil den ikke opføre sig på den måde.

Har du installeret nogen service packs på dit VC?
Avatar billede spectual Nybegynder
11. juli 2001 - 10:09 #20
Det er jo også noget med, at getch() *ikke* er en standard del af conio.h - dvs. det varierer med hvordan de virker.
Avatar billede jpk Nybegynder
11. juli 2001 - 10:11 #21
Jeg har ikke installeret nogle service packs...
Avatar billede spectual Nybegynder
11. juli 2001 - 10:12 #22
Hm. Jeg må prøve det igen og se om den stadigvæk gør det.
Avatar billede spectual Nybegynder
11. juli 2001 - 10:18 #23
Nå, det er ikke mig der er blevet sindsyg.

Fakta er, at programmet virker i Win2k men ikke i Win98 (har lige testet det).

Da jeg skal bruge det i Win98, bliver jeg nødt til at finde en anden løsning, hvis der overhovedet er een når det er et konsol program (jeg tvivler).
Avatar billede mickni33 Nybegynder
11. juli 2001 - 13:21 #24
Det burde virke med getch() ligemeget hvilken Win man bruger jeg har brugt den i flere år. Det samme har tusinde af andre så det lyder mærkeligt.
Men den virker ikke i Linux da den ikke har conio.h med i sine biblioteker. Jeg sidder bla med win 98.. måcke er det scanf der laver problæemer, prøv med en cin>> og include <iostream.h>
Avatar billede mickni33 Nybegynder
11. juli 2001 - 13:24 #25
Har lige læst at hvis du bruger microsoft visual c++ så hedder den _getch(); , har aldrig set det før men prøv lige.
Avatar billede spectual Nybegynder
11. juli 2001 - 13:46 #26
Gider du at sende mig en version med _getch() jpk?
Avatar billede mickni33 Nybegynder
11. juli 2001 - 13:50 #27
Jeg har ikke Visual c++.. Men jeg tror ikke det er det der er galt jeg tror det er den der scanf(snot) der driler Visual C++ er heller ikke den bedste at bruge da den som der jo står er til C++ og ikke til C som er det du roder med i dette stykke kode.
Avatar billede spectual Nybegynder
11. juli 2001 - 14:32 #28
Helt vildt tak, jpk. :}

Desværre, desværre, desværre.

Ingen af de 3 versioner virker i Windows 98 selv om de alle virker i Windows 2000.

:/
Avatar billede karlkoder Nybegynder
13. juli 2001 - 10:09 #29
har du prøvet at bruge kbhit() ??
Avatar billede spectual Nybegynder
13. juli 2001 - 12:04 #30
Ja, men den venter vist ikke. Kan du give et eksempel?
Avatar billede cipherz Nybegynder
14. juli 2001 - 20:30 #31
nå men her er get tingen det med conio.h kan jeg ikke svare på da jeg bruger linux men jeg kan svarer på det andet.

#include <stdio.h>

int main()
{
    char *navn;

    printf(\"Indtast navn:\");
   
      fgets(navn, sizeof(navn),stdin);
    printf(\"Fik:%s\\n\",navn);
}
// Lars Advice A/S
Avatar billede spectual Nybegynder
21. juli 2001 - 20:19 #32
Lukker spørgsmålet.

Tak for hjælpen - træls at der ikke lige var en ordentlig løsning.
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