[Powered by Google Translate] [Command-line argumenten]
[Christopher Bartholomeus - Harvard University]
[Dit is CS50 - CS50.TV]
Een handige functie voor een programma is om te accepteren input van de gebruiker.
Tot nu toe hebben we verkend enkele functies binnen de CS50 bibliotheek
om invoer van de gebruiker, zoals accepteren "get string,"
die vraagt ​​de gebruiker, terwijl de toepassing wordt uitgevoerd, voor een string.
>> Er zijn echter gevallen waarin u uw programma input te leveren
voordat het daadwerkelijk draait.
Op deze manier hoeft u niet om aanvullende informatie te vragen bij uw gebruiker
tijdens het uitvoeren van een eenvoudige taak.
Neem, bijvoorbeeld, de mv of verplaatsen commando in UNIX.
Dit commando kan de gebruiker een bestand verplaatst van een locatie naar de andere.
Volgens de manual pagina's, mv accepteert twee argumenten op de opdrachtregel
het bestand dat wordt verplaatst en de locatie van het bestand wordt verplaatst naar.
Dus dit voorbeeld heeft een opdracht met twee argumenten.
Dus hoe vertellen we onze C-programma om deze command-line argumenten te gebruiken?
>> Nou, het blijkt dat de belangrijkste, die we gebruiken in alle C-programma's, een geheim heeft.
Belangrijkste accepteert twee parameters: argc en argv.
Laten we gaan over deze voorwaarden.
>> De eerste parameter, argc, wat staat voor argument tellen,
een gegevenstype integer.
De argc parameter bevat het aantal argumenten, met inbegrip van de opdracht.
In onze verhuizing commando, hoewel we alleen hebben twee argumenten weergegeven,
argc waarde zal 3.
De tweede parameter, argv, wat staat voor argument vector,
is een array van char pointers die wijzen op strings.
>> Dit betekent dat elk element in argv, beginnend bij nul,
bevat de opdracht en argumenten.
Bijvoorbeeld, argv [0], die ik zal aanduiden als argv nul,
bevat altijd de opdracht die wordt uitgevoerd -
in dit geval mv.
argv [1] bevat het eerste argument, bestand.txt,
en argv [2] zal het tweede argument bevat, ~ / CS50 /.
De laatste argument van argv altijd null.
Dus laten we de uitvoering van deze command-line argumenten.
In de vorige oefeningen, plaatsten we leegte, wat betekent niets, als parameter de belangrijkste is.
Echter, om voor ons om command-line argumenten te gebruiken,
we moeten vervallen en plaats binnen van de belangrijkste int argc, char * argv [] te verwijderen.
Nu, om de hele element argv, die zijn uw argumenten te openen,
u kunt gewoon herhalen, of lus, door middel van de array als deze.
Dus, de binnenkant van het lichaam de belangrijkste is, we gaan om verder te gaan en een type voor lus:
for (int i = 0; i <argc; i + +).
>> We hebben hier behoefte aan een accolade omdat we alleen het uitvoeren van een regel code
in het lichaam van deze lus.
We zullen verder gaan en een keer raken tab,
then printf typ ("argv [% d], naar een geheel getal vertegenwoordigen,
is% s, voor strijkkwartet, dan is de nieuwe regel.
Dan bieden wij printf i voor de huidige iteratie van de lus
en argv [i] voor de tekenreeksweergave van de huidige command-line argument.
Wanneer we het uit te voeren met twee argumenten, dan zien we de argumenten wordt weergegeven in de terminal.
Eerder hebben we gezegd dat de argv een array van char pointers gehouden.
>> Dus, als dit het geval is, hoe kunnen we dan toegang tot afzonderlijke tekens in elk argument?
Bijvoorbeeld, wat als ik wilde om te zoeken naar een specifiek karakter in het eerste argument?
Nou, het antwoord is dat we nodig hebben om een ​​geneste lus toe te passen
die dan doorlopen elk van de elementen in de argumentstring.
Dit is hoe je het doet.
>> Ten eerste, we gaan een kopie van example2.c te maken.
Dan, de binnenkant van de eerste for-lus,
we gaan om een ​​extra lus toe te voegen.
Dus voor (int j = 0, n = strlen (argv [i]),
die geeft ons dan de lengte van de huidige argument,
; J <n; j + +)
We gaan naar de locatie van elk karakter af te drukken
binnenkant van de huidige argument door het gebruik van printf.
Dus, printf ("argv [% d], de index van de huidige argument vertegenwoordigen,
vervolgens op [% d] nogmaals, om de huidige karakter van het huidige argument vertegenwoordigen,
is:% c, voor de huidige karakter in het argument.
Tot slot bieden we printf met de index van de buitenste lus, i,
dan de index van de binnenste lus.
>> En onze laatste argument van printf is het werkelijke karakter van de verstrekte argument
op de opdrachtregel.
Nu, omdat ik de string functie strlen om de lengte van een string te verkrijgen,
Ik moet de string.h bibliotheek ook toevoegen aan de top van onze omvat.
Dus, om dat te doen, zullen we omhoog gaan, en iets minder dan stdio.h, we gaan doen
# Include .
>> Dus, laten we samen te stellen en uit te voeren en verstrekt haar een echte argument.
>> En, zoals we kunnen zien, hebben we nu de exacte locatie van elk individu char in het argument.
Dus dat is het. Ik ben Christopher Bartholomeus, dit is CS50.
[CS50.TV]