Wat is \r precies in C-taal?

Dit is het programma waar ik \rtegenkwam. Wat is hier precies zijn rol? Ik ben beginner in C en stel een duidelijke uitleg hierover op prijs.


Antwoord 1, autoriteit 100%

Het is Carriage Return. Bron: http://msdn.microsoft.com/ nl-nl/bibliotheek/6aw8xdf2(v=vs.80).aspx

Het volgende herhaalt de lus totdat de gebruiker op de Return-toets heeft gedrukt.

while(ch!='\r')
{
  ch=getche();
}

Antwoord 2, autoriteit 94%

'\r'is het regelterugloopteken. De belangrijkste momenten waarop het nuttig zou zijn, zijn:

  1. Bij het lezen van tekst in binaire modus, of die mogelijk afkomstig is van een vreemd besturingssysteem, zul je het vinden (en waarschijnlijk weggooien) vanwege CR/LF-regeleinden van tekstbestanden in Windows-formaat.

  2. Bij het schrijven naar een interactieve terminal op stdoutof stderr, kan '\r'worden gebruikt om de cursor terug te verplaatsen naar het begin van de regel, om deze te overschrijven met nieuwe inhoud. Dit maakt een mooie primitieve voortgangsindicator.

De voorbeeldcode in je bericht is beslist een verkeerdemanier om '\r'te gebruiken. Het gaat ervan uit dat een regelterugloop voorafgaat aan het teken van de nieuwe regel aan het einde van een ingevoerde regel, wat niet-draagbaar is en alleen waar is in Windows. In plaats daarvan zou de code moeten zoeken naar '\n'(nieuwe regel), en elke regelterugloop die voor de nieuwe regel wordt gevonden weggooien. Of het kan de tekstmodus gebruiken en de C-bibliotheek de vertaling laten afhandelen (maar de tekstmodus is lelijk en zou waarschijnlijk niet moeten worden gebruikt).


Antwoord 3, autoriteit 77%

Er waren eens terminals zoals typemachines (met alleen hoofdletters, maar dat is een ander verhaal). Zoek naar ‘Teletype’, en hoe denk je dat ttyis gebruikt voor ‘eindapparaat’?

Die apparaten hadden twee afzonderlijke bewegingen. De wagenretour verplaatste de printkop terug naar het begin van de regel zonder over het papier te scrollen; het teken voor de regelinvoer verplaatste het papier een regel omhoog zonder de printkop terug naar het begin van de regel te verplaatsen. Op die apparaten had je dus twee controletekens nodig om de printkop terug te brengen naar het begin van de volgende regel: een regelterugloop en een regelinvoer. Omdat dit mechanisch was, kostte het tijd, dus je moest lang genoeg pauzeren voordat je meer tekens naar de terminal stuurde na het verzenden van de CR- en LF-tekens. Een gebruik voor CR zonder LF was om ‘vet’ te doen door de tekens op de regel te overslaan. Je zou de regel één keer uitschrijven, dan CR gebruiken om opnieuw te beginnen en twee keer afdrukken over de karakters die vet moeten zijn. Je kunt natuurlijk ook X’s typen over dingen die je gedeeltelijk verborgen wilt houden, of zeer dichte ASCII-kunstfoto’s maken met oordeelkundige overschrijding.

Op Unix was alle logica voor dit spul verborgen in een terminalstuurprogramma. Je zou de opdracht sttyen de onderliggende functies kunnen gebruiken (in die dagen werden ioctl()-aanroepen; ze werden door POSIX in de interface termiosopgeschoond. .1 in 1988) om allerlei manieren waarop de terminal zich gedroeg aan te passen.

Uiteindelijk kreeg je ‘glazen terminals’ waar de snelheden hoger waren en er waren nieuwe eigenaardigheden om mee om te gaan – Hazeltine-storingen enzovoort, enzovoort. Deze werden vastgelegd in de termcapen later terminfobibliotheken, en vervolgens verder ingekapseld achter de cursesbibliotheek.

Echter, sommige andere (niet-Unix) systemen verborgen dingen ook niet, en je had te maken met CRLF in je tekstbestanden – en nee, dit zijn niet alleen Windows en DOS die in het ‘CRLF’-kamp zaten .

Hoe dan ook, op sommige systemen heeft de C-bibliotheek te maken met tekstbestanden die CRLF-regeleinden bevatten en presenteert deze aan u alsof er alleen een nieuwe regel aan het einde van de regel staat. Als u er echter voor kiest om het tekstbestand als een binair bestand te behandelen, ziet u zowel de CR-tekens als de LF.

Systemen zoals het oude Mac OS (versie 9 of eerder) gebruikten alleen CR (ook bekend als \r) voor het einde van de regel. Systemen zoals DOS en Windows (en, geloof ik, veel van de DEC-systemen zoals VMS en RSTS) gebruikten CRLF voor het beëindigen van de regel. Veel van de internetstandaarden (zoals e-mail) verplichten CRLF-regeleinden. En Unix heeft altijd alleen LF (ook bekend als NL of newline, vandaar \n) gebruikt voor zijn regeleindes. En de meeste mensen slagen er meestal in om CR te negeren.

Je code is nogal funky bij het zoeken naar \r. Op een systeem dat voldoet aan de C-standaard, ziet u de CR niet tenzij het bestand in binaire modus wordt geopend; de CRLF of CR wordt toegewezen aan NL door de C runtime bibliotheek.


Antwoord 4, autoriteit 15%

Er zijn enkele karakters die een nieuwe regel kunnen aangeven. De gebruikelijke zijn deze twee:
‘\n’ of ‘0x0A’ (10 in decimaal) -> Dit teken wordt “Line Feed” (LF) genoemd.
‘\r’ of ‘0x0D’ (13 in decimaal) -> Deze heet “Carriage return” (CR).

Verschillende besturingssystemen behandelen nieuwe regels op een andere manier. Hier is een korte lijst van de meest voorkomende:

DOS en Windows

Ze verwachten dat een nieuwe regel de combinatie is van twee tekens, namelijk ‘\r\n’ (of 13 gevolgd door 10).

Unix (en dus ook Linux)

Unix gebruikt een enkele ‘\n’ om een ​​nieuwe regel aan te geven.

Mac

Macs gebruiken een enkele ‘\r’.


Antwoord 5, autoriteit 8%

‘ \r ‘ betekent koetsretour.

De \r betekent niets bijzonders als gevolg. Voor terminals in tekenmodus (die doorgaans nog oudere afdrukken emuleren zoals hierboven), werken \r en \n in de onbewerkte modus op dezelfde manier (behalve beide in termen van de cursor, omdat er geen wagen of rol is. Vroeger werd een \n gebruikt om de wagen naar beneden te verplaatsen, terwijl de \r werd gebruikt om de wagen terug naar de linkerkant van het scherm te verplaatsen.


Antwoord 6, autoriteit 8%

Dat is niet altijd waar; het werkt alleen in Windows.
Voor interactie met terminal in putty, Linux-shell,… zal het worden gebruikt om de cursor terug te brengen naar het begin van de regel.
volgende afbeelding toont het gebruik daarvan:

Zonder ‘\r’:

Gegevens komen zonder ‘\r’ naar de putty-terminal, het heeft alleen ‘\n’.
het betekent dat de gegevens alleen in de volgende regel worden afgedrukt.

voer hier de afbeeldingsbeschrijving in

Met ‘\r’:

Gegevens worden geleverd met ‘\r’, d.w.z. string eindigt met ‘\r\n’. Dus de cursor in de putty-terminal gaat niet alleen naar de volgende regel, maar ook naar het begin van de regel

voer hier de afbeeldingsbeschrijving in


Antwoord 7

Het hangt af van op welk platform je zit hoe het vertaald zal worden en of het er überhaupt zal zijn: Wikipedia-item op nieuwe regel

Other episodes