Monday 18 September 2017

C Printf Formatkoder Binära Options


C-biblioteksfunktion - printf. For heltalspecifika-torer d, i, o, u, x, X precision anger det lägsta antalet siffror som ska skrivas Om värdet som ska skrivas är kortare än detta nummer, är resultatet polstret med ledande nollor The Värdet är inte avkortat även om resultatet är längre. En precision på 0 betyder att ingen tecken är skrivet för värdet 0 För e, E och f-specificatorer är detta antalet siffror som ska skrivas ut efter decimaltalet För g - och G-specificatorer Detta Är det maximala antalet signifikanta siffror som ska skrivas ut För s är det maximala antalet tecken som ska skrivas ut Som standard skrivs alla tecken ut tills det slutliga nollteckenet uppträder. För c-typ har det ingen effekt När ingen precision har angivits är standardvärdet Är 1 Om perioden specificeras utan ett uttryckligt värde för precision antas 0. Precisionen är inte specificerad i formatsträngen, men som ett extra heltalvärdesargument som föregår det argument som måste formateras. Argumentet är inter Preted som en kort int eller osignerad kort int gäller endast integerspecifiers i, d, o, u, x och X. Argumentet tolkas som en lång int eller unsigned long int för heltalspecifika-torer i, d, o, u, x Och X, och som en bred karaktär eller bred teckensträng för specifikationerna c och s. Argumentet tolkas eftersom en lång dubbel endast gäller floating point-specifikationerna e, E, f, g och G. Tilläggsargument Beroende på formatsträngen, Funktionen kan förvänta sig en sekvens av ytterligare argument, var och en innehåller ett värde som ska införas istället för varje - tag som anges i formatparametern om någon. Det bör finnas samma antal av dessa argument som antalet - tag som förväntar ett värde. Återföring Värde. Om det lyckas, returneras det totala antalet skrivna tecken. Om fel uppges returneras ett negativt tal. Följande exempel visar användningen av printf-funktion. Låt oss kompilera och köra ovanstående program för att producera följande result. printf och scanf format Codes. number med upp till sex digi Ts av precision, vetenskaplig notation. Footnote I printf, förväntas uttryckstypen kampanjer - i ett uttryck är karaktär och kort omvandlas till int och float konverteras till dubbel Således motsvarar c faktiskt en parameter av typen int och f och G motsvarar faktiskt parametrar av typ dubbel Således i printf är det ingen skillnad mellan f och lf eller mellan g och lg Men i scanf är det som passerar en pekare till variabeln så att inga typpromotioner förekommer eller förväntas sålunda f och lf Är helt annorlunda i scanf, men samma i printf. Personligen använde jag lg rutinmässigt för dubblar i både printf och scanf, men det här är okej idag och i själva verket kommer gcc att ge dig ett varningsmeddelande för att använda lg i printf Det vanliga förfarandet idag är att använda g för dubbla i printf och lg för dubbla i scanf Det spelar ingen roll vilken typ du använder för printf eftersom funktionen printf library behandlar dem som synonymt men det är viktigt att få det rätt för scanf. printf Format modi Fiers. Modifiers visas mellan och och key letter. a numret är en fältbredd. Och ett tal är en precision. Example printf 6 3f, 2 8 ger 2 800 med ett mellanslag före 2. Notera att 6 innehåller de 3 decimalerna och 1 till 6 tecken totalt Således 6-3-1 2 tecken till Till vänster om decimalpunkten. 0 siffran noll betyder pad med nollor till fältbredd brukar endast användas med heltal. l brevet betyder långt, t. ex. ld för att formatera en lång int i decimal. Exempel på 0. 2 3 ett mellanslag mellan och 3.In 02d är 0 inte en del av fältbredden. Det är ett modifieringspersonal. När du har en fältbredd måste du skriva den så att den inte börjar med en noll och då kan du lägga in en noll som modifierare Tecken om du vill ha det. Print formaterad data till stdout. Writes C-strängen spetsad enligt formatet till standardutgången stdout Om formatet innehåller formatspecifika delsekvenser som börjar med, formateras de ytterligare argumenten som följer formatet och infogas i den resulterande strängen som ersätter deras respektive specifikationer. format C-sträng som innehåller texten som ska vara Skrivet till stdout Det kan eventuellt innehålla inbäddade formatspecifikatorer som ersätts av de värden som anges i efterföljande ytterligare argument och formateras som begärd. Där den specifierande tecknet i slutet är den viktigaste komponenten, eftersom den definierar typen och tolkningen av dess motsvarande Argument. Signed decimal integer. Unsigned decimal integer. Unsigned hexadecimal integer. Unsigned hexadecimal heltal stor. Decimal flytpunkt, lowercase. Decimal flytpunkt, uppercase. Scientific notation mantissa exponent, små bokstäver. Vetenskaplig notation mantissa exponent, uppercase. Use den kortaste representationen e Eller f. Använd den kortaste representationen E eller F. Hexadecimal floating point, lowercase. Hexadecimal floating point, uppercase. String of characters. Nothing printed Det motsvarande argumentet måste vara en pekare till ett signerat int. Antalet bokstäver hittills lagras i Den spetsiga platsen. En följd av ett annat tecken kommer att skriva en singel till Stream. The formatspecifier kan också innehålla subspecifiers flaggor bredd och modifierare i den ordningen, som är frivilliga och följa dessa specifikationer. Lövjustering inom den angivna fältbredden. Höger motivering är standard se breddsunderspecifika. Resultatet med ett plus - eller minustecken eller - även för positiva tal Som standard förekommer endast negativa tal med a-sign. If inget tecken kommer att skrivas läggs ett tomt utrymme in före värdet. Används med ox eller X-specifikationer Värdet föregås med 0 0x respektive 0X för värden som är olika än noll. Används med A A E F F g eller G tvingar den skrivna utgången att innehålla en decimal, även om inga fler siffror följer. Om inget antal siffror följer, Inget decimaltal är skrivet. Leds-pads numret med nollor 0 istället för mellanslag när padding är specificerad se breddsunderspecifikatorn. För heltalsspecifikationer anger dioux X precision det minsta antalet siffror som ska skrivas. Om värdet som ska skrivas är s Horter än detta nummer, är resultatet polstret med ledande nollor Värdet avkortas inte ens om resultatet är längre En precision på 0 betyder att inget tecken är skrivet för värdet 0 För en A e E f och F-specificatorer är detta numret Av siffror som ska skrivas ut efter decimalvärdet som standard är detta 6 För g - och G-specificatorer Det här är det maximala antalet signifikanta siffror som ska skrivas ut För s är det maximala antalet tecken som ska skrivas ut Som standard skrivs alla tecken ut tills Slutet null-tecken uppstår Om perioden anges utan ett explicit värde för precision 0 antas. Precisionen är inte specificerad i formatsträngen, men som ett ytterligare heltalvärdesargument som föregår det argument som måste formateras. Längden under - specifier ändrar datatypens längd Detta är ett diagram som visar de typer som används för att tolka motsvarande argument med och utan längdspecifika om en annan typ används, rätt typpromotion eller Omräkning utförs, om tillåtet. Notera om c-specifikatet tar det en int eller wintt som argument, men utför den rätta omvandlingen till ett char-värde eller en wchart innan du formaterar den för output. Note Gula rader anger specificatorer och delspecifika-torer introducerad av C99 Se teckensnitt för specifikationerna för utvidgade typer ytterligare argument Beroende på formatsträngen kan funktionen förvänta sig en sekvens av ytterligare argument, var och en innehåller ett värde som ska användas för att ersätta ett formatspecifikare i formatsträngen eller en pekare till en lagringsplats , För n Det ska finnas minst lika många av dessa argument som antalet värden som anges i formatspecifikatorerna. Ytterligare argument ignoreras av funktionen. Returvärde. Till framgång returneras det totala antalet tecknade tecken. Om ett skrivfel Inträffar, är felindikatorn ferror inställd och ett negativt tal returneras. Om ett multibyte teckenkodningsfel inträffar när du skriver stora tecken ställs errno på EILSEQ a Något ett negativt tal returneras. Partikala biblioteksimplementeringar kan stödja ytterligare specifikatorer och underspecifikatorer De som listas här stöds av de senaste C och C-standarderna, båda publicerade 2011, men de i gul introducerades endast i C99 för C-implementeringar eftersom C 11 och kanske inte stöds av bibliotek som överensstämmer med äldre standards. puts Skriv sträng för att stdout function scanf Läs formaterad data från stdin-funktionen fprintf Skriv formaterad data för att strömma funktion fwrite Skriv block av data för att strömma function. macro konstanter. Det finns ingen Binär konvertering specificerar i glibc normalt. Det är möjligt att lägga till anpassade konverteringstyper till printf-familjen i funktioner i glibc Se registerprintfunktion för detaljer Du kan lägga till en anpassad b-konvertering för eget bruk, om det förenklar programkoden för att få den tillgänglig. Här är ett exempel på hur man implementerar ett anpassat printf-format i glibc. Också vad du talar om hantering av flera resultat Ts i följd är inte reentrancy per se, men snarare helt enkelt nedfallet av att använda vilka belopp som ett globalt objekt för att lagra resultatet i. Funktionen återges inte igen I C är det korrekta eller åtminstone ofta använda idiomet för att hantera funktioner Som lagrar sina resultat i ett globalt objekt är att kopiera dessa resultat omedelbart efter att ha fått dem. Det här har den stora fördelen att om endast ett resultat krävs i taget då är det inte nödvändigt med ytterligare tilldelning Greg A Woods 27 november på 0 51. Jag måste vara oense Jag kan inte se hur man lägger till en diskret preprocessorsymbol någonstans nära skadan att begränsa användningsfallen allvarligt, vilket gör gränssnittet felaktigt, reserverar permanent lagring under programmets varaktighet för ett temporärt värde och Genererar sämre kod på de flesta moderna plattformar R 27 nov på 1 53. Printf-familjen kan bara skriva ut i basen 8, 10 och 16 med standardspecifikationen direkt. Föreslå att skapa en funktion som omvandlar t Han talar till en sträng per kod s särskilda behov. Alla andra svar hittills har åtminstone en av dessa begränsningar. Använd statiskt minne för returbufferten. Detta begränsar antalet gånger som funktionen kan användas som argument för att printf. Allocate memory Kräver uppringningskoden till fria pekare. Fråga uppkallningskoden för att uttryckligen tillhandahålla en lämplig buffert. Kall printf direkt Detta förpliktar en ny funktion för att fprintf sprintf vsprintf etc. Använd ett minskat antal heltal. Följande har ingen av ovanstående begränsningar Kräver C99 eller senare och användning av s Det använder en sammansatt bokstavlig för att ge buffertutrymmet Det har inga problem med flera samtal i en printf. Printf-formatsträng. Med Alex Allain. C har som standard en stor makt för formatering Utgång Standardfunktionsfunktionen, printf, tar en formatsträng som låter dig ange mycket information om hur ett program är formaterat. Notera om du letar efter information om formateringsutdata i C, ta en titt på f Ormatting C-utgång med hjälp av iomanip. Let s titta på anatomin i en formatsträng följt av några korta exemplarprogram för att visa olika inställningar i åtgärd. Jag vann t att inkludera alla möjliga alternativ - istället är mitt mål att göra det lätt att förstå Det minsta språket som du kan använda för att skapa formatsträngar och lära dig hur du använder den vanliga formateringen du mest sannolikt behöver. A-format av en formatsträng. När du ringer till printf är den grundläggande idén att du ska För att ge en rad tecken som har några bokstäver och vissa element som ska bytas ut Till exempel en sträng som. Vill skrivas bokstavligt som det verkar Även om det ibland är tillräckligt att bokstavligen skriva in din kod exakt vad du vill skriva ut , Vill du vanligtvis göra något mer avancerat - antingen introducera specialtecken med hjälp av flyktsekvenser eller införa variabla värden med formatspecifiers. Escape Sequences. There är några tecken som du inte direkt kan skriva in i en st Ring Dessa är tecken som en newline, som måste representeras med hjälp av en viss syntax. Dessa kallas flyktsekvenser och ser ut som här. Här har jag skrivit in nya linjer mellan varje bokstav, a, b och c. Varje escape-sekvens börjar med en backslash-karaktär De viktigaste flyktsekvenserna som du ska använda är n, för att sätta en ny linje och t att lägga in en flik. Eftersom en backslash normalt indikerar starten på en flyktsekvens, om du vill lägga in en flyktsekvens måste du använda för att Visa en backslash. is hur du skriver en Windows-sökväg i C. Det är ett annat avancerat trick, vilket är att du kan skriva num för att visa ASCII-tecknet representerat av värdet num Detta är användbart om du vill visa ett tecken som Du kan inte skriva in på tangentbordet, till exempel accentuerade bokstäver. Exempelvis kommer 130 att skriva ut ett tecken i vissa fall beroende på vad din maskin är inställd på med utökade ASCII-tecken. Formatspecifiers. If du vill introducera några Varians i outp Ut, gör du det genom att ange att externa data behövs. I den här strängen indikerar d att värdet som ska visas vid den punkten i strängen måste tas från en variabel. Tecknet indikerar att vi splitsar vissa data i Strängen och d-teckenet indikerar att vi splitsar i ett decimaltal Den del av strängen som börjar med kallas formatspecifikationen För att faktiskt få det numret måste vi ange det värde som ska skrivas ut. Vilket kommer att visas. Av den intressanta formateringen som du kan göra innebär att ändra de värden du lägger efter tecknet, vilket är det faktiska formatet. Formatet för vad som visas om ett tecken är. De flesta av dessa fält är valfria, andra än att tillhandahålla en konverteringsspecifika som du Jag har redan sett till exempel med d för att skriva ut ett decimaltal. Förståelsen av denna formatering görs bäst genom att arbeta bakåt, börjar med omvandlingsspecifikationen och arbeta utåt. Så låt s börja i slutet. Konversionsspecifier. Konversationen Jonspecifikare är den del av formatspecifikationen som bestämmer grundformatet för det värde som ska skrivas ut. Konverteringsspecifika för heltal. Om du vill skriva ut ett decimaltalsnummer i bas 0, använder du antingen d eller id eller jag Om du vill skriva ut ett heltal i oktal eller hexadecimal använder du o för oktal eller x för hexadecimal Om du vill ha stora bokstäver A istället för en när du skriver ut decimal 10 kan du använda X. Conversion-specifikationer för flytpunktsnummer. Floating Point Numbers har ett ton av olika alternativ, bäst visade i en tabell. Okej, det var inte så illa var det Men det här diagrammet är typ av komplicerat Min rekommendation använder bara g, och det brukar göra vad du vill. Var vetenskaplig notation Är mest lämplig. Visning av ett procenttal. Eftersom procenttecknet används för att definiera formatspecifikatorer, det är ett speciellt formatspecifikat som betyder att skriva ut procentandelen. För att helt enkelt skriva ut ett procenttecken. Nu, låt oss gå igenom var och en av de olika compone Nts av ett format specifier. Length Modifier. Längd modifieraren är kanske märkligt namngiven det ändrar inte längden på utmatningen istället är det vad du använder för att ange längden på inmatningen Huh säger att du har. Här är d den Input till printf och vad du säger är att du vill skriva ut d som en dubbel men d är inte en dubbel, den är en lång dubbel En lång dubbel är sannolikt att vara 16 byte jämfört med 8 för en dubbel, så skillnaden är viktig Prova att köra det lilla fragmentet och du kommer att upptäcka att du får skräppost som ser ut så här. Hävdar att byte som ges till printf behandlas som en dubbel - men de är dubbla, de är långa dubbla. Längden Är fel och resultaten är ful. Längdmodifieraren handlar om att hjälpa printf hantera fall där du använder ovanligt stora eller ovanligt små variabler. Det bästa sättet att tänka på längdmodifierare är att säga vilken variabel typ jag har, och Behöver jag använda en längdmodifierare för den här D hjälper dig ut. Lång dubbel d 3 1415926535 printf Lg, jag vill speciellt nämna om den breda karaktärshanteringen Om du skriver. Utan l, blir resultatet att skriva ut en W på skärmen. Anledningen är så bred Tecken är två byte, och för enkla ASCII-tecken som W är den andra byten 0 därför tror printf att strängen är klar. Du måste berätta för printf att leta efter multibyte tecken genom att lägga till ls. Om du brukar använda wprintf, kan du däremot helt enkelt använda s och det kommer att behandla alla strängar som breda teckensträngar. Precisionsmodifieraren är skrivet och har lite olika betydelser för de olika omvandlingsspecifika-torerna som d eller g. För flytande punktnummer egf styr det antalet siffror som skrivs ut efter decimalpunkten. Om det angivna numret har mer precision än vad som anges, kommer det att runda till exempel. vilka visas som. Interstämmande, för g och G kommer det att styra Antal signifikanta siffror som visas Detta påverkar inte bara värdet efter decimaltalet men hela numret. För heltal, å andra sidan, precisionen styr det lägsta antalet siffror som skrivs ut. Vill skriva ut nummer 10 med tre siffror. Där S ett speciellt fall för heltal - om du anger 0, kommer numret noll inte ha någon effekt. För strängar styr precisionen max längden på strängen som visas. Detta är användbart om du behöver se till att Din produktion går inte utöver ett bestämt antal tecken. Breddfältet är nästan motsatt av precisionsfältet Precision styr det maximala antalet tecken att skriva ut, bredden styr minsta antal och har samma format som precision, utom utan en Decimalpunkten. De tomma mellanslagen går i början, som standard. Du kan kombinera precisionen och bredden om du gillar breddsprecision. Notera det ledande utrymmet. Flagginställningen styr tecken som läggs till i en sträng, t. ex. om du vill lägga till 0x till ett hexadecimalt tal, eller om du vill ange tal med 0. De specifika flaggalternativen är. Pound Sign. Adding a kommer att orsaka en 0 för att läggas upp till ett oktaltal när du använder o-omvandlingsspecifikationen, eller en 0x som ska läggas upp till ett hexadecimalt tal när du använder ax-omvandlingsspecifieraren. För de flesta andra omvandlingsspecifika-torer, lägger en testning helt enkelt in införandet av en decimalpunkt, även om Siffran har ingen fraktionerad del. being tryckt. Resultaten i helt enkelt. Zero Flag 0. Användning 0 tvingar numret att polstras med 0s Det här spelar enbart roll om du använder breddinställningen för att fråga om en minimal bredd för ditt nummer Till exempel, om du skriver. Plus-teckenflaggan. Plustecknet kommer att innehålla teckenspecifikatorn för numret. Minustecknets flagga. Finalt kommer minustecknet att orsaka att utmatningen är vänsterjusterad Detta är viktigt om du använder Bredden specifier och yo Du vill att polstret ska dyka upp i slutet av utmatningen istället för början. Med polstret i slutet av outputbining det hela tillsammans. För ett visst format specifier, kan du ge måste alltid ge procenttecknet och basspecifikationen Du Kan då inkludera några eller alla flaggor, bredd och precision och längd som du vill. Du kan även inkludera flera flaggor. Här är ett särskilt komplext exempel som visar flera flaggor som skulle vara användbara för att skriva ut minnesadresser som hexadecimala värden. Det enklaste sättet För att läsa detta är att först märka tecknet och läsa sedan åt höger mot vänster - x indikerar att vi skriver ut ett hexadecimalt värde 10 indikerar att vi vill ha 10 totalt tecken bredd nästa 0 är en flagga som indikerar att vi vill padda med 0s intead av mellanslag och slutligen tecknet visar att vi vill ha en ledande 0x Eftersom vi börjar med 0x betyder det att vi ska ha 8 siffror - exakt rätt mängd för att skriva ut en 32-bitars minnesadress. Slutresultatet är. Läs mer s Imilar artiklar.

No comments:

Post a Comment