Friday 10 November 2017

C Printf Format Koder Binære Alternativer


printf og scanf formatkodenummer med opptil seks siffer med presisjon, vitenskapelig notasjon Fotnote: I printf () forventes uttrykkstype kampanjer - i et uttrykk blir karbon og kort konvertert til int, og float konverteres til dobbel. Således svarer c faktisk til en parameter av typen int og f og g svarer faktisk til parametere av typen dobbel. Dermed i printf () er det ingen forskjell mellom f og lf, eller mellom g og lg. I scanf () er det imidlertid en pointer til variabelen, slik at ingen type kampanjer oppstår eller forventes. Således er f og lf ganske forskjellige i scanf, men det samme i printf. Personlig pleide jeg å bruke lg rutinemessig for dobler i både printf og scanf, men dette er ute av favør i disse dager, og faktisk vil gcc gi deg en advarsel om bruk av lg i printf. Den vanlige prosedyren i disse dager er å bruke g for dobbelt i printf og lg for dobbel i scanf. Det spiller ingen rolle som du bruker til printf fordi funksjonen printf library behandler dem som synonymt, men det er viktig å få det riktig for scanf. Modifikatorer for printf-format Modifiseringer vises mellom og og bokstavene. et tall er en feltbredde. og et tall er en presisjon Eksempel: printf (6.3f, 2.8) gir 2.800 (med et mellomrom før 2) Merk at det 6 inneholder de 3 desimaler og 1. - 6 tegn totalt. Dermed 6-3-1 2 tegn til venstre for desimaltegnet. 0 (tallet null) betyr pute med nuller til feltbredde (vanligvis bare brukt med heltall) l (bokstaven) betyr lang, f. eks. ld for å formatere en lang int i desimal Eksempel på 0: 2. 3 (ett mellomrom mellom. og 3) I 02d er 0 ikke en del av feltbredden. Det er et modifikasjonsfigur. Og når du har en feltbredde, må du skrive den slik at den ikke starter med null (og så kan du legge inn en null som et modifikator tegn hvis du vil).Returerer en streng formatert av de vanlige printf-konvensjonene til C bibliotek funksjon sprintf. Se nedenfor for flere detaljer og se sprintf (3) eller printf (3) på systemet ditt for en forklaring av de generelle prinsippene. Perl har sin egen sprintf formatering: den emulerer C-funksjonen sprintf (3). men bruker ikke det med unntak av flytende punktnumre, og selv da er det bare standard modifiserende tillatelser tillatt. Ikke-standardutvidelser i ditt lokale sprintf (3) er derfor utilgjengelige fra Perl. I motsetning til printf. sprintf gjør ikke det du sannsynligvis mener når du sender det en matrise som ditt første argument. Oppstillingen er gitt skalar kontekst, og i stedet for å bruke det første elementet i arrayet som formatet, vil Perl bruke antall elementer i arrayet som formatet, noe som nesten ikke er nyttig. Perls sprintf tillater følgende universelt kjente konverteringer: I tillegg tillater Perl følgende omfattende støttede konverteringer: Til slutt tillater Perl for unødvendige, men allment støttede konverteringer for bakover (og vi mener bakover) kompatibilitet: Merk at antallet eksponent siffer i den vitenskapelige notasjonen produsert av e. E. g og G for tall med modulen til eksponenten mindre enn 100 er systemavhengig: den kan være tre eller mindre (nullpolstret etter behov). Med andre ord, 1,23 ganger ti til den 99. kan være enten 1.23e99 eller 1.23e099. På samme måte for a og A. eksponenten eller de heksadesimale sifferene kan flyte: spesielt det lange doble Perl-konfigurasjonsalternativet kan forårsake overraskelser. Mellom formatet og formatet kan du angi flere flere attributter som styrer tolkningen av formatet. I rekkefølge er disse: En eksplisitt formatparameterindeks, for eksempel 2. Som standard vil sprintf formatere det neste ubrukte argumentet i listen, men dette lar deg ta argumentene i orden: Når et mellomrom og et plustegn er gitt Som flaggene på en gang blir plassen ignorert. Når flagget og en presisjon er gitt i o-konverteringen, økes presisjonen dersom den er nødvendig for den ledende 0. Dette flagget forteller Perl å tolke den medfølgende strengen som en vektor av heltall, en for hvert tegn i strengen. Perl bruker formatet til hvert heltall i sin tur, og knytter seg til de resulterende strengene med en separator (en prikk, som standard). Dette kan være nyttig for å vise ordinære verdier av tegn i vilkårlig strenger: Sett en stjerne før v for å overstyre strengen som skal brukes til å skille tallene: Du kan også spesifikt angi argumentnummeret som skal brukes for tilmeldingsstrengen ved hjelp av noe som 2v for Eksempel: Argumenter er vanligvis formatert for å være like bred som nødvendig for å vise den oppgitte verdien. Du kan overstyre bredden ved å sette et tall her, eller få bredden fra neste argument (med) eller fra et angitt argument (f. eks. Med 2): Hvis en feltbredde oppnådd gjennom er negativ, har den samme effekt som - flagg: venstre-begrunnelse. Du kan angi en presisjon (for numeriske konverteringer) eller en maksimal bredde (for strengkonverteringer) ved å angi en. etterfulgt av et tall. For flytende punktformater bortsett fra g og G. Dette spesifiserer hvor mange steder høyre for desimaltegnet skal vises (standard er 6). For eksempel: For g og G angir dette det maksimale antall sifre som skal vises, inkludert de som ligger før desimaltegnet, og de som følger etter det for eksempel: For heltallskonverteringer innebærer spesifisering av presisjon at utdataene til selve nummeret skal være null - paddde til denne bredden, hvor 0-flagget ignoreres: For strengkonverteringer, forkortes spesifiseringen av en presisjon strenget for å passe til den angitte bredden: Du kan også få presisjonen fra neste argument ved å bruke .. eller fra et angitt argument (f. eks. med .2): Hvis en presisjon som oppnås gjennom er negativ, teller det som om det ikke er noen presisjon i det hele tatt. For numeriske konverteringer kan du angi størrelsen for å tolke tallet som å bruke l. h. V. q. L. eller ll. For heltalskonverteringer (duox X bi DUO) antas tall vanligvis å være det som standard integerstørrelsen er på plattformen din (vanligvis 32 eller 64 biter), men du kan overstyre dette til å bruke i stedet en av standard C-typer, som støttet av kompilatoren som ble brukt til å bygge Perl: Fra og med 5.14 oppstår ingen av disse unntak hvis de ikke støttes på plattformen. Men hvis advarsler er aktivert, utstedes en advarsel for printf-advarselsklassen på et ikke-støttet konverteringsflagg. Hvis du i stedet foretrekker et unntak, gjør du dette: Hvis du vil vite om en versjon avhengig av innholdet før du begynner å kjøre programmet, sett noe slikt på toppen: Du kan finne ut om Perl støtter quads via Config: For flytende - poengkonverteringer (efg EFG), antas tall vanligvis å være standard flytpunktsstørrelse på plattformen din (dobbel eller lang dobbel), men du kan tvinge lenge dobbelt med q. L. eller ll hvis plattformen din støtter dem. Du kan finne ut om Perl støtter lange dobler via Config: Du kan finne ut om Perl anser lang dobbel å være standard flytende punktstørrelse som skal brukes på plattformen din via Config: Det kan også være så lenge dobler og dobler er de samme ting: Størrelsespecifik V har ingen effekt for Perl-kode, men støttes for kompatibilitet med XS-kode. Det betyr at bruk standardstørrelsen for et Perl heltall eller flytende punktnummer, som er standard. Normalt tar sprintf neste ubrukte argument som verdien som skal formateres for hver formatspesifikasjon. Hvis formatspesifikasjonen bruker for å kreve flere argumenter, blir disse forbrukes fra argumentlisten i rekkefølgen de vises i formatbeskrivelsen før verdien som skal formateres. Når et argument er spesifisert av en eksplisitt indeks, påvirker dette ikke den normale rekkefølgen for argumentene, selv om den eksplisitt spesifiserte indeksen ville ha vært det neste argumentet. bruker a for bredden, b for presisjonen, og c som verdien som skal formateres mens: ville bruke a for bredden og presisjonen, og b som verdien som skal formateres. Her er noen flere eksempler, vær oppmerksom på at når du bruker en eksplisitt indeks, kan det hende at det må unnslippe: Hvis brukstall (inkludert brukskode 39: notcharacters39) er i kraft og POSIX :: setlocale er blitt kalt, tegnet som brukes for desimalskiller i formaterte flytende punktnumre påvirkes av LCNUMERIC-lokalen. Se perllocale og POSIX. Skrive formatert data til stdout Skriver C-strengen peket etter format til standardutgang (stdout). Hvis formatet inneholder formatspecifikatorer (delsekvenser som begynner med), formateres de ekstra argumentene som følger formatet og settes inn i den resulterende strengen som erstatter de respektive spesifiseringspunktene. Parametre format C-streng som inneholder teksten som skal skrives til stdout. Det kan eventuelt inneholde innebygde formatspecifikatorer som er erstattet av verdiene som er angitt i etterfølgende tilleggsargumenter og formatert etter behov. Hvor spesifiserende tegn på slutten er den viktigste komponenten, siden den definerer typen og tolkningen av det tilhørende argumentet: Signert decimaltall Unsigned decimal integer Ikke-signert hexadecimalt heltall Unsigned hexadecimal heltall (stor bokstav) Decimal flytpunkt, små bokstaver Decimal flytpunkt, store bokstaver Vitenskapelig notasjon (mantissaexponent), små bokstaver Vitenskapelig notasjon (mantissaexponent), stor bokstav Bruk korteste representasjon: e eller f Bruk korteste representasjon: E eller F Heksadesimale flytpunkt, små bokstaver Hexadecimal flytpunkt, stor bokstav Strek av tegn Intet trykt. Det tilsvarende argumentet må være en peker til en signert int. Antallet skrevet tegn hittil er lagret i den spisse plasseringen. En etterfulgt av et annet tegn vil skrive en enkelt til strømmen. Formatet spesifiserer kan også inneholde underspesifikasjoner: flagg. bredde..Precision og modifikatorer (i den rekkefølgen), som er valgfrie, og følg disse spesifikasjonene: Venstrejustere innenfor den gjeldende feltbredden. Høyre begrunnelse er standard (se breddeunder-spesifiserer). Forces å forfølge resultatet med et pluss eller minustegn (eller -) selv for positive tall. Som standard er bare negative tall foran et tegn. Hvis ingen tegn skal skrives, legges et tomt rom inn før verdien. Brukes med o. x eller x spesifiserer verdien forut med 0. 0x eller 0X for verdier forskjellig fra null. Brukes med a. A. e. E. f. F. G eller G tvinger den skriftlige utdata til å inneholde et desimaltegn, selv om ikke flere tall følger. Som standard, hvis ingen sifre følger, skrives ikke desimaltegn. Venstre-pads tallet med nuller (0) i stedet for mellomrom når polstring er spesifisert (se bredde under-spesifiserer). For heltallspesifikatorer (d. I. O. U. X. X): presisjon angir minimum antall siffer som skal skrives. Hvis verdien som skal skrives er kortere enn dette nummeret, er resultatet polstret med ledende nuller. Verdien avkortes ikke, selv om resultatet er lengre. En presisjon på 0 betyr at ingen karakter er skrevet for verdien 0. For en . A. e. E. f og F spesifiserer: dette er antall siffer som skal skrives ut etter desimaltegnet (som standard er dette 6). For g - og G-spesifiseringer: Dette er det maksimale antall signifikante sifre som skal skrives ut. For s. Dette er det maksimale antall tegn som skal skrives ut. Som standard skrives alle tegn til nullpunktet på slutten oppstår. Hvis perioden er spesifisert uten en eksplisitt verdi for presisjon. 0 antas. Presisjonen er ikke spesifisert i formatstrengen, men som et ekstra heltallverdargument som går foran argumentet som må formateres. Lengden under-spesifiserer endrer lengden på datatypen. Dette er et diagram som viser typene som brukes til å tolke de tilsvarende argumentene med og uten lengde-spesifiserer (hvis en annen type brukes, utføres den riktige typen forfremmelse eller konvertering, hvis tillatt): Merknad angående c-spesifiseringen: det tar en int eller wintt) som argument, men utfører den riktige konverteringen til en char-verdi (eller en wchart) før du formaterer den for utgang. Merk: Gule rader angir spesifiseringselementer og under-spesifiseringsprogrammer introdusert av C99. Se ltcinttypesgt for spesifikatorene for utvidede typer. . (tilleggsargumenter) Avhengig av formatstrengen, kan funksjonen forvente en sekvens av flere argumenter, som hver inneholder en verdi som skal brukes til å erstatte et format spesifiserer i formatstrengen (eller en peker til et lagringssted, for n). Det bør være minst like mange av disse argumentene som antall verdier som er spesifisert i formatet spesifiseringspunktene. Ytterligere argumenter ignoreres av funksjonen. Returnerer verdien Etter suksess blir det totale antall tegn som er skrevet, returnert. Hvis det oppstår en skrivefeil, er feilindikatoren (ferror) satt og et negativt nummer returneres. Hvis en multibyte tegnkodingsfeil oppstår mens du skriver brede tegn, er errno satt til EILSEQ og et negativt nummer returneres. Kompatibilitet Spesielle biblioteksimplementeringer kan støtte flere spesifiseringselementer og underspesifikatorer. De som er oppført her, støttes av de nyeste C - og C-standardene (begge publisert i 2011), men de i gul ble introdusert i C99 (bare nødvendig for C-implementeringer siden C11), og kan ikke støttes av biblioteker som overholder eldre standarder. setter Skriv streng til stdout (funksjon) scanf Les formatert data fra stdin (funksjon) fprintf Skriv formatert data for å streame (funksjon) Skriv Skriv blokk av data for å strømme (funksjon) funksjoner: Makrokonstanter:

No comments:

Post a Comment