Trine Kornum Christiansen wrote:
> for (int i = 0 ; i < 100 ; i++ )
> {
> updateFile.seekg( i * sizeof( clientData ) );
>
> clientData client;
>
> updateFile.read( reinterpret_cast<char *>( &client ),
> sizeof( clientData ) );
>
> if (client.kortnummer == account)
> {
> outputLine( cout, client );
> cout << "Antal loginforsoeg: " << client.login;
> cin >> client.login;
Nydelig kode for en nybegynder
Men det, du har gang i, er ikke så
nemt.
For det første kan du slet ikke bruge cout/cin hvis du vil give brugerne
mulighed for at editere deres input. cout og cin er mest beregnet til
stream's (dvs. filer) og dur' ikke rigtigt til at styre en terminal.
For det andet er input og output som regel buffered. Dvs. at maskinen
lagrer tegnene i en buffer før den giver dem videre til dig. Når input
kommer fra en terminal afsluttes bufferen som regel først, når brugeren
har trykket ENTER på tastaturet. Dvs at du ikke ser tryk på piletasterne
før det er for sent.
Hvis Windows er indrettet lige som linux, som jeg sidder med her, så
er der yderligere den komplikation, at bufferingen sker på to niveauer:
Det ene er C/C++'s egen buffer (som du kan slå fra med et kald til
setbuf - se nedenfor). Det andet er på systemniveau, hvor du skal til
at rode med ioctl's (som er noget forfærdeligt noget), for at få det
til at virke.
For det tredje er tastetryk ikke bare enkelttegn. Backspace og newline
er, men piletasterne sender som regel sekvenser af tegn. Du kan teste
det med et lille program:
#include <stdio.h>
#include <iostream>
int main() {
int c; // getchar returnerer en int. EOF er lig med -1
setbuf(stdin, 0); // Unbuffered input
while (1) {
c = getchar();
cout << c << endl;
}
}
Programmet virker ikke på linux uden at du først får sat den rigtige
ioctl. Men det kan godt være, at det virker på Windows.
Alt i alt er det noget værre noget, du er ved at rode dig ud i
Det
bedste er nok at kigge blandt de biblioteker, der følger med til din
compiler på Windows. Prøv at se om der ligger noget med navnene curses.h,
ncurses.h, conio.h, termio.h eller lignende og forbered dig på en del
manuallæsning.
-Claus