Har lige et par kommentare!
Først og fremmest omkring cin1. cin kopier altid input til kommando promten.
2. cin læser input indtil du trykker enter.
3. cin læser ikke alle keyboard taster(bla. pile tasterne).
Der er 2 forskellige metoder som kan løse dette problem.1. include<conio.h> det er ikke et C++ standard bibliotek og derfor er det platform afhæning men bibliteket er nemt at anvende.
#include <conio.h>
int main()
{
int key_pressed = 0;
while(key_pressed==27) // 27 er esc
{
// keydown tjek
if(kbhit())
{
// læser tast
key_pressed = getch();
}
}
return 0;
}
mener at turboC++ har en funktion kaldet gotoxy(x,y) som kan flytte curseren i kommando promten hvis du ønsker at overskrive tekst skrevet til kommando promten
2. Denne metode er platform afhæning og kræver kendskab din platforms API. jeg har inkluderet hele source koden til denne løsning. Dette virker kun på windows platformen, jeg ved heller ikke om turboC++, indeholder windows bibliotekerne.
#include <windows.h>
#include <iostream>
int main()
{
// get standard input handle
HANDLE standardInputHandle_ = GetStdHandle(STD_INPUT_HANDLE);
// gem gamle input mode, så den kan gendannes når programmes
// afsluttes.
DWORD oldInputMode_;
GetConsoleMode(standardInputHandle_,&oldInputMode_);
// enable window input events.
DWORD inputMode = ENABLE_WINDOW_INPUT;
SetConsoleMode(standardInputHandle_,inputMode);
bool exit=false;
int counter=0;
INPUT_RECORD buffer[128];
DWORD numRead=0;
do
{
// hent eventuelle events
ReadConsoleInput(standardInputHandle_,buffer,128,&numRead);
for(unsigned i=0; i<numRead; ++i)
{
if(buffer[i].EventType==KEY_EVENT)
{
if(buffer[i].Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE)
{
exit = true;
}
else if(buffer[i].Event.KeyEvent.wVirtualKeyCode==VK_UP)
{
counter+=100;
std::cout << counter << std::endl;
}
else if(buffer[i].Event.KeyEvent.wVirtualKeyCode==VK_DOWN)
{
counter-=100;
std::cout << counter << std::endl;
}
}
}
}while(!exit);
}
begge disse kode eksempler er kompileret med Visual Studio C++
Indlæg senest redigeret d. 02.02.2008 00:20 af Bruger #13246