[Powered by Google Translate] [Liña de comando argumentos]
[Christopher Bartolomeu - Harvard University]
[Esta é CS50 - CS50.TV]
Un recurso útil para un programa para aceptar a entrada do usuario.
Ata o momento, exploran algunhas funcións dentro da biblioteca CS50
para aceptar a entrada do usuario, como "pegar corda",
que avisa o usuario, mentres que o programa é executado, por unha corda.
>> No entanto, hai casos en que quere achegar a súa entrada programa
antes de que el está realmente funcionando.
Desta forma, non precisa de pedir información adicional do seu autor
durante a execución dunha tarefa sinxela.
Tomé-se, por exemplo, o mv ou orde de movemento en UNIX.
Este comando permite que o usuario move un arquivo de un lugar a outro.
De acordo coas páxinas do manual, MV acepta dous argumentos de liña de comandos:
o ficheiro que está a ser movido ea localización do arquivo está movido.
Polo tanto, este exemplo ten un mando con dous argumentos.
Entón, como imos dicir o noso programa en C para utilizar eses argumentos de liña de comandos?
>> Ben, acontece que de inicio, que usan en todos os programas C, ten un segredo.
Inicio acepta dous parámetros: argc e argv.
Imos pasar por riba deses termos.
>> O primeiro parámetro, argc, que está a conta de argumentos,
ten un tipo de datos enteiro.
O parámetro argc contén o número de argumentos, incluíndo o comando.
No noso mando de movemento, a pesar de só ter dous argumentos presentados,
valor argc será 3.
O segundo parámetro, argv, que significa vector argumento,
é unha matriz de punteiros de char que ligan con cordas.
>> Isto significa que cada elemento de argv, partindo de cero,
contén o mando e argumentos.
Por exemplo, argv [0], que eu vou chamar de argv cero,
sempre conterá a orde que está a ser executado -
neste caso, MV.
argv [1] contén o primeiro argumento, file.txt,
e argv [2] contén o segundo argumento, ~ / CS50 /.
O último argumento argv sempre será nulo.
Entón, imos aplicar eses argumentos de liña de comandos.
En exercicios anteriores, posto baleiro ou sexa, nada, como parámetro principal.
Con todo, a fin de nos usar liña de comandos argumentos,
necesitamos eliminar baleiro e coloque dentro principal int argc, char * argv [].
Agora, para acceder todo o elemento de argv, que son os seus argumentos,
pode simplemente repetir ou loop, a través da matriz coma este.
Entón, dentro do corpo principal, nós estamos indo para ir adiante e escriba un loop:
é (int i = 0; i <argc, i + +).
>> Non necesitamos unha chaveta aquí porque estamos só a execución dunha liña de código
dentro do corpo do ciclo.
Imos adiante e bateu na guía unha vez máis,
escriba printf ("argv [% d], para representar un valor enteiro,
é% s, para cadea, o carácter de nova liña.
Entón, nós fornecen printf i para a iteração actual do loop
e argv [i] para a representación de cadea do argumento de liña de comandos actual.
Cando executa-lo con dous argumentos, imos ver os argumentos que están sendo exhibidos no terminal.
Anteriormente, dixo que o argv realizada nunha matriz de punteiros char.
>> Así, se este é o caso, coma nós, entón, acceder caracteres individuais en cada argumento?
Por exemplo, se eu quería mirar para un personaxe específico no primeiro argumento?
Ben, a resposta é que necesitamos aplicar un loop aninhado
que pode entón percorrer cada un dos elementos da cadea de argumento.
Isto é como facelo.
>> En primeiro lugar, imos facer unha copia de exemplo2.c.
Entón, dentro do primeiro ciclo,
imos engadir un adicional de loop.
Así, a (int j = 0, n = strlen (argv [i]),
que, a continuación, dá-nos o longo do argumento actual,
; J <n, j + +)
Nós imos imprimir a localización de cada personaxe
dentro do argumento actual usando printf.
Así, printf ("argv [% d], para representar o contido da cadea de argumento,
entón [% d] unha vez máis, para representar o carácter actual do argumento actual,
é: c%, para o carácter actual no argumento.
Finalmente, fornecen printf co índice do lazo externo, i,
a continuación, o índice de loop interno.
>> E o noso último argumento para printf é o carácter real da argumentación, sempre que
na liña de comandos.
Agora, porque eu usei a función cadea strlen para obter a lonxitude dunha corda,
Debo engadir tamén a biblioteca string.h para arriba da nosa inclúe.
Entón, para facelo, nós imos ir cara arriba, e algo menos de stdio.h, imos facer
# Incluír.
>> Entón, imos compilar e executar e proporcionar-lle un argumento real.
>> E, como podemos ver, agora temos a localización exacta de cada char individual no argumento.
Entón é iso. Eu son Christopher Bartolomeu; este é CS50.
[CS50.TV]