[Powered by Google Translate] [Argumente în linia de comandă]
[Christopher Bartolomeu - Universitatea Harvard]
[Acest lucru este CS50 - CS50.TV]
O caracteristică utilă pentru un program este de a accepta date introduse de utilizator.
Până acum, am explorat unele funcții în cadrul bibliotecii CS50
să accepte introduse de utilizator, cum ar fi "sa string,"
care solicită utilizatorului, în timp ce cererea se execută, pentru un șir.
>> Cu toate acestea, există cazuri în care doriți să aducă o contribuție de program
înainte de a fi, de fapt rulează.
În acest fel, nu aveți nevoie pentru a solicita informații suplimentare de la utilizator
în timp ce executa o sarcină simplă.
Luați, de exemplu, mv sau comanda Mutare în UNIX.
Această comandă permite utilizatorului pentru a muta un fișier dintr-o locație la alta.
Conform paginile de manual, mv acceptă două argumente în linia de comandă:
fișier care este mutat și locația fișierului este mutat la.
Deci, acest exemplu are o comandă cu două argumente.
Deci, cum le spunem programul nostru de C pentru a utiliza aceste argumente de linie de comandă?
>> Ei bine, se pare că principalul, pe care le folosim în toate programele C, are un secret.
Principalul acceptă doi parametri: argc și argv.
Să trecem peste acești termeni.
>> Primul parametru, argc, care vine de la numărul de argument,
are un tip de date de întreg.
Parametrul argc conține numărul de argumente, inclusiv comanda.
În comanda noastră mișcare, deși avem doar două argumente afișat,
Valoarea argc va fi 3.
Al doilea parametru, argv, care vine de la vectorul argument,
este o matrice de pointeri char acel punct la siruri de caractere.
>> Acest lucru înseamnă că fiecare element din argv, incepand de la zero,
conține comanda și argumentele.
De exemplu, argv [0], pe care voi referi în continuare la zero argv,
va conține întotdeauna comanda care este în curs de a alerga -
în acest caz, mv.
argv [1] va conține primul argument, file.txt,
și argv [2] va conține al doilea argument, ~ / CS50 /.
Ultimul argument al argv va fi întotdeauna nul.
Deci, haideți să pună în aplicare aceste argumente de linie de comandă.
În exercițiile anterioare, am plasat nule, adică nimic, ca parametru principal.
Cu toate acestea, pentru ca noi să utilizați linia de comandă argumente,
avem nevoie pentru a elimina interiorul nule și locul principal de int argc, char * argv [].
Acum, pentru a accesa tot elementul din argv, care sunt argumentele tale,
puteți itera pur și simplu, sau bucla, prin matrice de genul asta.
Deci, în interiorul corpului principal, am de gând să mergi înainte și să tastați o buclă pentru:
pentru (int i = 0; i <argc; i + +).
>> Nu avem nevoie de o proteză cret aici pentru ca suntem de executare o singură linie de cod
în corpul această buclă.
Vom merge mai departe și a lovit o dată fila,
apoi tastați printf ("argv [% d], să reprezinte o valoare întreagă,
este% s, pentru șir, apoi caracterul linie noua.
Apoi ne-am oferi printf i pentru iterația curentă a buclei
și argv [i] pentru reprezentarea șir de curent de linie de comandă argumentul.
Când l-am alerga cu două argumente, vom vedea argumentele fiind afișate în terminal.
Mai devreme am spus că argv a avut loc o serie de indicii char.
>> Deci, dacă este cazul, cum putem accesa apoi de caractere individuale din fiecare argument?
De exemplu, dacă am vrut să caute un caracter specific în primul argument?
Ei bine, răspunsul este că avem nevoie de a aplica o buclă imbricată
care va itera apoi prin fiecare dintre elementele din șirul argument.
Acesta este modul în care o faci.
>> În primul rând, vom face o copie a example2.c.
Apoi, în interiorul prima bucla,
vom adăuga o buclă suplimentară pentru.
Deci, pentru (int j = 0, n = strlen (argv [i]),
care apoi ne dă lungimea argumentului curent,
; J <n; j + +)
Mergem pentru a imprima locația fiecare caracter
interiorul argumentul curent prin utilizarea printf.
Deci, printf ("argv [% d], pentru a reprezenta indicele de argumentul curent,
apoi [% d] încă o dată, pentru a reprezenta caracterul actual al argumentului curent,
este: C%, pentru caracterul curent în argument.
În cele din urmă, oferim printf cu indicele de bucla exterior, i,
atunci indicele de bucla interioară.
>> Și argumentul nostru ultima printf este personaj real din argumentul oferit
la linia de comandă.
Acum, pentru că am folosit funcția strlen șir pentru a obține lungimea unui șir,
Trebuie să adaug, de asemenea, biblioteca string.h la partea de sus a include noastre.
Deci, pentru a face acest lucru, vom merge în sus, și doar în stdio.h, am de gând să faci
# Include .
>> Deci, hai să compila și a alerga și îi furnizează un argument real.
>> Și, după cum putem vedea, avem acum locatia exacta a fiecărui individ în char argumentul.
Deci asta e tot. Sunt Christopher Bartolomeu; acest lucru este CS50.
[CS50.TV]