Tekst inlezen en afsluiten met ESC

Status
Niet open voor verdere reacties.

ger@ld

Gebruiker
Lid geworden
27 aug 2006
Berichten
235
Hoi,

Ik ben een paar maanden geleden begonnen met het leren van de basis van c++. Ik heb hiervoor het boek C++ Grand Cru gelezen. Nu ben ik druk aan het oefenen, waarbij ik tegen een probleem aanstuit. Ik maak een progje waarmee tekst kan worden ingelezen van het toetsenbord, totdat de gebruiker op ESC drukt (dit is mijn code):

Code:
#include <iostream>
#include "Console.h"       //zie: [URL="http://www.ronkes.nl/programmeren/console%20api/default.asp"]http://www.ronkes...ult.asp[/URL]
#include <string>

using namespace std;

char regel[500];


void main()
{
	do
	{
		cin.getline(regel, 500);
	}while(GetVirtualKey() != VK_ESCAPE);
}

Als je het gecompileerd hebt, weet je dat het niet helemaal flexibel loopt: Het programma wacht ALTIJD op een toets aan het begin van de regel.

Weet iemand een oplossing voor mijn probleem?

Alvast hartelijk bedankt!
Gerald
 
Ik weet niet wat de GetVirtualKey functie precies doet, maar ik weet wel dat de do while tenminste 1 keer uitgevoerd wordt. Ongeacht of de key nou escape is of niet. Meestal levert dit problemen op, omdat je vaak wil dat de lus pas uitgevoerd wordt als aan een conditie voldaan wordt.

Wellicht is dat hier ook het geval?
 
Helaas is dit niet de oplossing. Wat m'n bedoeling is, is dat als de laatst ingevoerde toets , die is getypt met cin, esc is, de invoer stopt, en niet dat er ná de invoer nog om een toets wordt gevraagd.

Maar in ieder geval bedankt!:)
 
uhm.. Dit is de oplossing die ik meestal gebruik voor dit soort problemen. Waarbij <escape> dan de code voor je escape toets is. Toegegeven, het is nog niet misschien portable, maar het is wel aan te passen voor jouw toepassing:

char key = '';

while (key != <escape>){
cin >> key;
}

Ik denk dat daarin bij jou wellicht het eieren eten zit: cin.getline houdt pas op als je een enter naarbinnen gooit, of de max van 500 tekens haalt.

Op bovenstaande manier hak je meteen na het escape karakter de lus af. Misschien dat het met de GetVirtualKey() != VK_ESCAPE in de while wel goed werkt. Dat kan ik dus hier niet controleren.
 
De compiler snapt escape niet...

Code:
#include <iostream>

using namespace std;

void main()
{
	char key;

	while(key != <escape>)
	{
		cout << "test\n";
		cin >> key;
	}
}

--------------------Configuration: f - Win32 Debug--------------------
Compiling...
f.cpp
C:\Mijn documenten\helpmij\code.cpp(9) : error C2059: syntax error : '<'
C:\Mijn documenten\helpij\code.cpp(10) : error C2143: syntax error : missing ';' before '{'
Error executing cl.exe.

f.exe - 2 error(s), 0 warning(s)

Snapt <escape> niet
 
Dat kan wel kloppen, want <escape> is ook geen echte c++ code. Je zult dan het acii code van de escape key moeten pakken (waarschijnlijk kun je die vinden als de waarde van VK_ESCAPE in die andere library).

Het was dus maar een voorbeeld om het concept van mijn oplossing aan te geven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan