[Powered by Google Translate] [Kommandoradsargument]
[Christopher Bartholomew - Harvarduniversitetet]
[Detta är CS50 - CS50.TV]
En användbar funktion för ett program är att acceptera användarinmatning.
Hittills har vi utforskat vissa funktioner inom CS50 biblioteket
att acceptera användarinmatning, såsom "få sträng,"
som uppmanar användaren, medan programmet körs, för en sträng.
>> Det finns dock fall där man vill ge ditt program ingång
innan den faktiskt körs.
På så sätt behöver du inte be ytterligare uppgifter från ditt användarnamn
samtidigt utför en enkel uppgift.
Ta till exempel mv eller flytta kommando i UNIX.
Detta kommando gör det möjligt för användaren att flytta en fil från en plats till en annan.
Enligt manualsidorna accepterar mv två kommandoradsargument:
den fil som flyttas och platsen som filen flyttas till.
Så detta exempel har ett kommando med två argument.
Så hur berättar vi vår C-program för att använda dessa kommandoradsargument?
>> Tja, visar det sig att huvud, som vi använder i alla C-program, har en hemlighet.
Huvud accepterar två parametrar: argc och argv.
Låt oss gå över dessa villkor.
>> Den första parametern, argc, som står för argumentet räkna,
har en datatyp heltal.
Den argc parametern innehåller många argument, bland annat kommandot.
I vår flytt kommando, även om vi bara har två argument visas,
argc värde blir 3.
Den andra parametern, argv, som står för argumentet vektor,
är en rad röding pekare som pekar på strängar.
>> Detta innebär att varje element i argv, utgående från noll,
innehåller kommandot och argument.
Till exempel argv [0], som jag ska hänvisa till som argv noll,
alltid innehåller det kommando som körs -
i detta fall, mv.
argv [1] kommer att innehålla det första argumentet, file.txt,
och argv [2] kommer att innehålla det andra argumentet, ~ / CS50 /.
Den sista argument argv kommer alltid att vara noll.
Så låt oss genomföra dessa kommandoradsargument.
I tidigare övningar, placerade vi ogiltiga, dvs ingenting, som huvudsaklig s parameter.
Men för att vi använder kommandoradsargument,
Vi måste ta bort ogiltiga och plats inuti huvud int argc, char * argv [].
Nu, för att komma åt hela element från argv, som är dina argument,
Du kan enkelt iterera eller slinga, genom uppsättningen så här.
Så inne i huvud kropp, kommer vi att gå vidare och skriva en for-loop:
for (int i = 0; i <argc, jag + +).
>> Vi behöver inte en klammerparentes här eftersom vi bara exekvera en rad kod
i kroppen av denna slinga.
Vi ska gå vidare och träffa flik gång,
skriv printf ("argv [% d], för att representera ett heltal,
är% s, för sträng och sedan den nya linjen tecknet.
Sedan ger vi printf i för den aktuella iteration av slingan
och argv [i] för sträng representation av den aktuella kommandoraden argument.
När vi kör den med två argument, vi får se de argument som visas i terminalen.
Vi har tidigare sagt att argv höll en rad röding pekare.
>> Så, om detta är fallet, hur ska vi komma då enskilda tecken i varje argument?
Till exempel, om jag ville leta efter ett visst tecken i det första argumentet?
Jo, svaret är att vi måste tillämpa en kapslad slinga
som sedan kommer att iterera igenom alla element i argumentet strängen.
Det är hur du gör det.
>> Först ska vi göra en kopia av example2.c.
Därefter, insidan av den första for-slingan,
vi kommer att lägga till en extra för slinga.
Så for (int j = 0, n = strlen (argv [i]),
vilket ger oss sedan längden av den aktuella argumentet,
, J <n, j + +)
Vi kommer att skriva ut platsen för varje tecken
insidan av nuvarande argumentet med printf.
Så printf ("argv [% d], för att representera index för den aktuella argumentet,
sedan [% d] en gång för att representera det aktuella tecknet för den aktuella argumentet,
är:% c, för den aktuella tecknet i argumentet.
Slutligen ger vi printf med index för den yttre slingan,, jag
då index för den inre slingan.
>> Och vår sista argument för att printf är den faktiska karaktär från den medföljande argumentet
på kommandoraden.
Nu, eftersom jag använde strängen funktionen strlen att erhålla längden på en sträng,
Jag måste också tillägga att string.h biblioteket till toppen av vår ingår.
Så, för att göra det, vi går upp, och knappt stdio.h, vi kommer att göra
# Include .
>> Så, låt oss kompilera och köra och ge det ett aktuellt argument.
>> Och som vi kan se har vi nu den exakta platsen för varje enskild röding i argumentet.
Så det är det. Jag är Christopher Bartholomew, det är CS50.
[CS50.TV]