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?
Annonceindlæg fra QNAP
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); }
Ved at indsætte en løkke, kan du \"æde\" alle tegn: char key; while (key != \'\') key = getch();
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.
Den skriver tegnet når tasten slippes igen.
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.
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!
Det er jo ikke noget du har prøvet, er det? Jeg har selvfølgelig prøvet begge dele og ingen af dem virker!
jeg har selv lige prøvet!!! Det virker fint...
11. juli 2001 - 09:44
#10
Hvilken compiler bruger du?
11. juli 2001 - 09:45
#11
Kunne du evt. ikke lige sende getch() sourcekoden? Jeg formoder at den kan findes i conio.cpp
11. juli 2001 - 09:46
#12
Visual C++ compiler
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().
11. juli 2001 - 09:50
#14
Er du nu sikker på det er blevet recompiled? Jeg bruger også VC++ 6.0...
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.
11. juli 2001 - 09:58
#16
OK, gi\' mig din e-mail adr., så sender jeg et par stykker. Hvilket operativsystem bruger du forresten?
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.
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...
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?
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.
11. juli 2001 - 10:11
#21
Jeg har ikke installeret nogle service packs...
11. juli 2001 - 10:12
#22
Hm. Jeg må prøve det igen og se om den stadigvæk gør det.
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).
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>
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.
11. juli 2001 - 13:46
#26
Gider du at sende mig en version med _getch() jpk?
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.
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. :/
13. juli 2001 - 10:09
#29
har du prøvet at bruge kbhit() ??
13. juli 2001 - 12:04
#30
Ja, men den venter vist ikke. Kan du give et eksempel?
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
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.
Kurser inden for grundlæggende programmering