Vertaling: wat wordt hier bedoeld?

Status
Niet open voor verdere reacties.

n0name

Nieuwe gebruiker
Lid geworden
2 nov 2014
Berichten
4
Dag, iedereen!

Ik ben bezig met een C++ opdracht voor school en loop vast op een van de sub-opdrachten.

Het gaat om een menu met submenu voor de Game of Life. Het is mij gelukt om een menu te maken, daarna een submenu. De volgende opdracht is: "Ruim eerste alle (eventuele) Enter's op, en pak dan de eerste niet-Enter".

Kan iemand mij vertellen wat hier bedoeld wordt?

Ik worstel al het hele weekend met deze vraag. :confused:
 
karakters worden aangeduid standaard met ANSI ASCII (ofwel charset-7bit). Deze staan op vrijwel alle computers vast (128-255 verschilt per land en taal).
De eerste 32 karakters (0 t/m 31) worden gebruikt als control-codes.
Zo is 12 een form-feed op de printer, 8 een beltoon-geluid (vroeger gebruikten ze die bij een oude typemachine het einde van een regel aan te geven, en hoorde je een bel), 9 is een tab en 0 is einde regel van een ASCIIZ string.
Je hebt bij 'enters' wat verwarring omdat de verschillende systemen, verschillende manieren hebben om een enter te verwerken.
Je hebt namelijk, bedenk het is echt gebaseerd op een oude typemachine, de 'ga 1 regel naar beneden' en 'ga naar het begin van de regel'
In de praktijk kon je zo een regel overtikken.. over wat er al stond heen. Als je bijv 2 keer hetzelfde tikte werd de inkt wat dikker aangebracht en leek het bold!
Oude matrix printers kenden deze truc ook ;)

Naar het begin van een regel wordt aangegeven met code 13 (decimaal), genaamde de CR (carrige return), dus 0xD (hecidecimaal) of \015 (octaal) of \r (scriptnotatie als php/perl/ruby, etc)
Naar de volgende regel is code 10 (LF ofwel Line Feed) (0xA, \012 of \n)

Op Linux heb je alleen karakter 10 en wil zeggen doe 13 + 10. 13 wordt genegeerd.
Op Windows heb je de combinatie 13 en dan 10 (CRLF)
Apple kent het precies andersom, zoals Apple/Motorola alles precies andersom hebben ;) 10 en dan 13 (LFCR)
Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Mac OS up to version 9 and OS-9 kennen alleen 13 (CR) als einde-regel.

Met andere woorden je moet de codes scannen op hun ascii waarde per karakter zoeken naar of 10 of 13, die weggooien, terwijl je de flag 'einde-regel' zet, dan als die flag is gezet een code ongelijk aan 10 en 13 vinden, en die zoeken we..

pseudo-code:

> variabele einde_regel = 0;
> voor A=alle karakters in string doe {
> .. als ascii-code(A) = 10 of 13 dan {
> .... zet einde_regel op 1
> .. }
> .. anders {
> .... als (einde_regel is 1 is waar) {
> ...... zet einde_regel op 0
> ...... code A is de eerste niet-enter
> .... }
> .. }
> }

Succes!
 
Laatst bewerkt:
Beste Domero,
Bedankt voor je antwoord. Ik begrijp je betoog, alleen ik begrijp het niet m.b.t. mijn vraag.
Dit is pas mijn 2e programmeeropdracht in m'n leven, dus allemaal best lastig.
Op internet heb ik gezocht en kwam ik dingen tegen als ignore, flush, clear.

Heeft het iets te doen met een functie die gaat de enters negeren?
dus na invoer getal of letter
cin.ignore

Daarnaast wat is het doel van het negeren van enters, is het functioneel of estetisch?

Misschien ook handig van mij om te melden: ik maak gebruik van CodeBlocks + Ubuntu.
 
Laatst bewerkt:
Het is vaak functioneel, zo krijg je de werkelijk ingevoerde tekst, ipv een tekst met enters, behalve in markups als HTML of XML.
Stel je voor dat je gegevens opslaat in een database.
Het is een verschil "naam\r\n" op te slaan ipv "naam"
als je dan zoekt op "naam" zul je die gegevens niet vinden.
 
Laatst bewerkt:
Beste Domero,

Bedankt voor de input ;)
Je antwoorden hebben me bevestigd dat ik het goede al gevonden had, maar ik twijfelde sterk of dit wel juist was.
Het voorbeeld met toevoegen aan een database was verhelderend. Daar zie je een duidelijk verschil tussen kale data of dat met 'troep' er aan.

Tnx again!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan