[Powered by Google Translate] [Command-Line Argumente]
[Christopher Bartholomew - Harvard Universiteit]
[Hierdie is CS50 - CS50.TV]
'N nuttige funksie vir 'n program is om die toevoer van die gebruiker te aanvaar.
So ver, het ons ondersoek sommige funksies binne die CS50 biblioteek
toevoer van die gebruiker, soos om te aanvaar "kry string,"
wat vra die gebruiker, terwyl die aansoek hardloop, vir 'n string.
>> Egter, is daar gevalle waar jy wil jou program om insette te lewer
voordat dit is eintlik hardloop.
Op hierdie manier, het jy nie nodig om addisionele inligting te vra van jou gebruiker
terwyl die uitvoering van 'n eenvoudige taak nie.
Neem, byvoorbeeld, die MV of skuif opdrag in UNIX.
Hierdie opdrag stel die gebruiker in staat om 'n lêer van een plek na 'n ander te beweeg.
Volgens die handleiding bladsye, mv twee command line argumente aanvaar:
die lêer wat verskuif word en die plek waar die lêer is verskuif na.
So is hierdie voorbeeld het 'n opdrag met twee argumente.
So hoe weet ons ons C program hierdie command-line argumente aan te wend?
>> Wel, dit blyk dat die hoof, wat ons in al die C-programme gebruik, het 'n geheim.
Main twee parameters: argc en bevat SPASIES aanvaar.
Kom ons gaan oor hierdie terme.
>> Die eerste parameter, argc, wat staan ​​vir die argument telling,
het 'n data tipe integer.
Die argc parameter bevat die aantal argumente, met inbegrip van die opdrag.
In ons skuif opdrag, maar ons het net twee argumente vertoon,
argc se waarde sal wees 3.
Die tweede parameter bevat SPASIES, wat staan ​​vir die argument vektor,
is 'n verskeidenheid van char verwysings wat verwys na snare.
>> Dit beteken dat elke element bevat SPASIES, vanaf nul,
bevat die opdrag en argumente.
Byvoorbeeld, bevat SPASIES [0], wat ek sal verwys as bevat SPASIES nul,
sal bevat altyd die opdrag wat loop -
in hierdie geval, mv.
bevat SPASIES [1] sal die eerste argument, file.txt,
en bevat SPASIES [2] sal die tweede argument bevat, ~ / cs50 /.
Die laaste argument bevat SPASIES sal altyd null.
So laat hierdie command-line argumente implementeer.
In die vorige oefeninge, ons geplaas nietig, beteken niks, as hoof se parameter.
Maar, ten einde vir ons opdrag-lyn argumente te gebruik,
moet ons nietig en plek binnekant van die belangrikste int argc, char * bevat SPASIES [] te verwyder.
Nou, om toegang te verkry tot die hele element van bevat SPASIES, wat is jou argumente,
Jy kan eenvoudig iteraat, of lus, deur die skikking soos hierdie.
So, binnekant van hoof se liggaam, ons gaan om voort te gaan en 'n soort vir loop:
(int i = 0; i <argc; i + +).
>> Ons hoef nie 'n krullerige brace hier omdat ons net een lyn van kode uitvoering
binne die liggaam van hierdie lus.
Ons sal voort te gaan en druk tab een keer,
dan tik printf ("bevat SPASIES [% d] 'n heelgetal waarde te verteenwoordig,
% s is, string, dan die nuwe lyn karakter.
Dan bied ons printf i vir die huidige iterasie van die lus
en bevat SPASIES [i] vir die string voorstelling van die huidige command-line argument.
Wanneer ons loop dit met twee argumente, sal ons sien die argumente in die terminale vertoon word.
Vroeër het ons gesê dat die bevat SPASIES 'n verskeidenheid van char pointers gehou.
>> So, as dit die geval is, hoe kan ons dan toegang tot individuele karakters in elke argument?
Byvoorbeeld, wat as ek wil om te kyk vir 'n spesifieke karakter in die eerste argument?
Wel, die antwoord is wat ons nodig het om 'n geneste lus om aansoek te doen
wat sal dan itereer deur elk van die elemente in die argument string.
Dit is hoe jy dit doen.
>> Eerste, gaan ons 'n afskrif van example2.c te maak.
Dan, binnekant van die eerste lus,
ons gaan 'n bykomende lus te voeg.
Dus, vir (int j = 0, n = strlen (bevat SPASIES [i]),
wat gee dan vir ons die lengte van die huidige argument,
; J <n; j + +)
Ons gaan die plek van elke karakter te druk
binnekant van die huidige argument deur die gebruik van printf.
So, printf ("bevat SPASIES [% d], die indeks van die huidige argument voor te stel,
[% d] weer, die huidige karakter van die huidige argument voor te stel,
is:% c, vir die huidige karakter in die argument.
Ten slotte, ons bied printf met die indeks van die buitenste lus, i,
dan is die indeks van die binneste lus.
>> En ons laaste argument is printf die werklike karakter van die argument wat voorsien word
op die command line.
Nou, omdat ek die string funksie strlen gebruik om die lengte van 'n string te verkry,
Ek moet ook voeg die string.h biblioteek na die top van ons sluit.
So, om dit te doen, sal ons optrek, en net onder stdio.h, ons gaan om dit te doen
# Include .
>> So, kom ons stel en uit te voer en gee dit 'n werklike argument.
>> En, soos ons kan sien, het ons nou die presiese ligging van elke karakter in die argument.
So dit is dit. Ek is Christopher Bartholomew, dit is CS50.
[CS50.TV]