| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
aLiSH
Registrado: 26 Oct 2007 Mensajes: 6
| Publicado: 14/11/2007 3:10 am | | | Título: deteccion de opciones desde linea de comandos |
| Hola a todos,
Me gustaría saber cómo se podría hacer para que un programa ejecutado desde el terminal detecte varias opciones que el usuario ponga en la linea de comandos. He mirado algo sobre las flags pero no creo que sea exactamente lo que busco. Hay algúm método o funcion estandarizado? o tengo que ir poniendo ifs para cada elemento en argv??
Por ejemplo: > ./mi_programa -i valor_i -j valor_j Y luego el programa según los valores de i,j haga unas cosas u otras.
No se si me expliqué bien. Muchas gracias por la ayuda. |
|
| Volver arriba | |
 |
Killrazor
Registrado: 24 Ene 2006 Mensajes: 1182 Ubicación: Barcelona
| Publicado: 14/11/2007 4:16 am | | | Título: |
| | Código: | #include <stdio.h> int main( int argc, const char* argv[] ) { // Prints each argument on the command line. for( int i = 0; i < argc; i++ ) { printf( "arg %d: %s\n", i, argv[i] ); } } |
int argc es el numero de parametros que lee en la linea de comandos, const char* argv[] es un array con estos argumentos en forma de texto que deberas transformar tu apropiadamente. El programa en cuestion que he puesto de ejemplo escribe por pantalla los argumentos que has puesto en linea de comandos. _________________ I wanna heal i wanna feel like I'm close to something real. I wanna find something I've wanted all along somewhere i belong |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 14/11/2007 7:11 am | | | Título: |
| Cuando se define la funcion main de esta forma:
| Código: | int main(int argc, char **argv){ ... } |
argc indica el numero de argumentos pasados mediante la linea de comandos incluyendo el nombre de la aplicacion.
argv es un puntero al bloque donde se almacenan las direcciones (tipo "char *") de cada uno de los argumentos en la forma de cadenas:
1) argv[0] apunta al primer argumento que, de estar disponible (lo usual), es el nombre de la aplicacion y en caso contrario es NULL.
2) Los elementos restantes en el rango 1 a argc son los argumentos pasados mediante la linea de comandos: argv[1] apunta al primer argumento, argv[2] apunta al segundo argumento, etc.
3) El valor almacenado en argv[argc] siempre es NULL.
Un programa sencillo (C estandar) que muestra como procesar la linea de comandos es:
| Código: | #include <stdio.h> #include <stdlib.h>
int main(int argc, char **argv) { int i; char **p; puts("Lista de argumentos (1):"); for (i = 0; i <= argc; i++) printf( "argv[%d] == \"%s\"\n", i, argv[i] != NULL ? argv[i] : "NULL" ); puts("----"); puts("Lista de argumentos (2):"); for (p = argv; p <= argv + argc; p++) printf( "argv[%ld] == \"%s\"\n", (long int) (p - argv), *p != NULL ? *p : "NULL" ); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
aLiSH
Registrado: 26 Oct 2007 Mensajes: 6
| Publicado: 15/11/2007 4:05 am | | | Título: |
| Muchas gracias por las ideas. He probado esto y me sale un error:
| Código: | for(int i = 0; i < argc; i++) { printf("arg %d: %s\n", i, argv[i]); // check arguments if(*argv[1]=='-help') { cerr << ":: USAGE ::" << endl; } } |
El error no me deja compilar y dice:
aviso: constante de carácter demasiado grande para su tipo aviso: la comparación siempre es falsa debido al rango limitado del tipo de datos
Que estoy poniendo mal?? muchas gracias por adelantado. Un saludo. |
|
| Volver arriba | |
 |
aLiSH
Registrado: 26 Oct 2007 Mensajes: 6
| Publicado: 15/11/2007 6:48 am | | | Título: |
| Vale, lo solucioné con:
| Código: | for(int i = 0; i < argc; i++) { if (strcmp(argv[i],"-help")==0) { cout << "tiene help" << endl; } } |
|
|
| Volver arriba | |
 |
|
|