[Powered by Google Translate] Della riga di comando [argomenti]
[Christopher Bartolomeo - Harvard University]
[Questo è CS50 - CS50.TV]
Una caratteristica utile per un programma è quello di accettare l'input dell'utente.
Finora, abbiamo esplorato alcune funzioni all'interno della libreria CS50
per accettare l'input dell'utente, come ad esempio "get stringa"
che richiede l'utente, mentre l'applicazione è in esecuzione, per una stringa.
>> Tuttavia, ci sono casi in cui si desidera fornire il vostro input programma
prima che sia effettivamente in esecuzione.
In questo modo, non c'è bisogno di chiedere informazioni supplementari per l'utente
durante l'esecuzione di un compito semplice.
Prendiamo, ad esempio, il comando mv o si muovono in UNIX.
Questo comando permette all'utente di spostare un file da una posizione a un'altra.
Secondo le pagine di manuale, mv accetta due parametri:
il file che si sta muovendo e la posizione del file sia spostato.
Quindi questo esempio ha un comando con due argomenti.
Quindi, come facciamo a dire il nostro programma C per utilizzare questi gli argomenti della riga di comando?
>> Bene, si scopre che principale, che usiamo in tutti i programmi C, ha un segreto.
Principale accetta due parametri: argc e argv.
Andiamo oltre i suddetti termini.
>> Il primo parametro, argc, che sta per numero di argomenti,
ha un tipo di dati integer.
Il parametro argc contiene il numero di argomenti, tra cui il comando.
Nel nostro comando di spostamento, anche se abbiamo solo due argomenti visualizzati,
valore di argc sarà 3.
Il secondo parametro, argv, che sta per il vettore argomento,
è un array di puntatori char che puntano in stringhe.
>> Ciò significa che ogni elemento in argv, partendo da zero,
contiene il comando e gli argomenti.
Ad esempio, argv [0], che mi riferirò come argv zero,
conterrà sempre il comando che viene eseguito -
in questo caso, mv.
argv [1] conterrà il primo argomento, file.txt,
e argv [2] conterrà il secondo argomento, ~ / CS50 /.
L'ultimo argomento di argv sarà sempre nullo.
Quindi cerchiamo di attuare tali argomenti della riga di comando.
Negli esercizi precedenti, abbiamo messo nulla, il che significa niente, come parametro principale.
Tuttavia, in modo per noi di usare il comando argomenti della riga,
abbiamo bisogno di rimuovere vuoto dentro e il luogo di principale int argc, char * argv [].
Ora, per accedere l'intero elemento di argv, quali sono i tuoi argomenti,
si può semplicemente scorrere, o loop, attraverso l'array come questo.
Quindi, all'interno del corpo principale, abbiamo intenzione di andare avanti e digitare un ciclo for:
for (int i = 0; i <argc, i + +).
>> Non abbiamo bisogno di una parentesi graffa qui perché stiamo solo l'esecuzione di una riga di codice
all'interno del corpo del ciclo.
Andremo avanti e colpire scheda una volta,
quindi digitare printf ("argv [% d], per rappresentare un valore intero,
è% s, per la stringa, il carattere di nuova riga.
Poi forniamo printf i per l'iterazione corrente del ciclo
e argv [i] per la rappresentazione di stringa della corrente della riga di comando argomento.
Quando lo si esegue con due argomenti, vedremo le argomentazioni in corso visualizzati nel terminale.
In precedenza abbiamo detto che il argv ha un array di puntatori char.
>> Quindi, se questo è il caso, come possiamo quindi accedere ai caratteri individuali in ciascun argomento?
Per esempio, che se volevo cercare un carattere specifico nel primo argomento?
Beh, la risposta è che abbiamo bisogno di applicare un ciclo nidificato
che poi scorrere ciascuno degli elementi nella stringa argomento.
Ecco come si fa.
>> In primo luogo, stiamo andando a fare una copia di example2.c.
Quindi, all'interno del primo ciclo,
stiamo andando ad aggiungere un ulteriore ciclo for.
Così for (int j = 0, n = strlen (argv [i]),
che poi ci dà la lunghezza dell'argomento corrente,
, J <n, j + +)
Stiamo per stampare la posizione di ciascun carattere
all'interno dell'argomento corrente utilizzando printf.
Quindi, printf ("argv [% d], a rappresentare l'indice della tesi corrente,
poi [% d] ancora una volta, per rappresentare il carattere corrente dell'argomento corrente,
è: c%, per il carattere corrente nell'argomento.
Infine, forniamo printf con l'indice del ciclo esterno, i,
allora l'indice del ciclo interno.
>> E il nostro ultimo argomento a printf il carattere effettivo dal l'argomento fornito
dalla riga di comando.
Ora, perché ho usato la funzione stringa strlen per ottenere la lunghezza di una stringa,
Devo anche aggiungere la libreria string.h all'inizio della nostra include.
Così, per fare questo, andiamo su, e poco meno di stdio.h, che andremo a fare
# Include .
>> Allora, compilare ed eseguire, fornendo un argomento reale.
>> E, come si può vedere, ora abbiamo la posizione esatta di ogni singolo carattere nell'argomento.
Quindi, questo è tutto. Sono Christopher Bartolomeo, questo è CS50.
[CS50.TV]