Autor
|
Tema: [Solucionado] Parametros desde consola (Leído 4,612 veces)
|
sabeeee
Desconectado
Mensajes: 155
|
#include <stdio.h> #include <stdlib.h> int main() { char clave[6]; printf("Escriba su clave: "); scanf("%s",clave); if(strcmp(clave,"passbasico")==0) { system("echo sencillo a ejecutar"); printf("\n"); } else { printf("Clave no valida"); } return 0; }
Hola soy nuevo en C y quisiera hacer algo así pero que en vez de que sea desde el mismo programa se pueda poner un parámetro externo "-pass passbasico" desde una consola por ejemplo.
|
|
« Última modificación: 3 Enero 2015, 03:38 am por sabeeee »
|
En línea
|
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él." Francis Bacon
|
|
|
engel lex
|
int main(int argc, char** argv)
El argc contiene la cantidad de argumentos pasados, argv contiene un array de lo pasado siendo 0 el archivo en si mismo y el resto lo que fue pasado con espacios
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Yoel Alejandro
|
Ya va no entiendo bien, quieres que el "parámetro externo" sea el password que introduce el usuario, o sea el password correcto o consigna con el cual debe cotejarse el que introduzca el usuario. Si es lo segundo, (intuyo que quieres llamar a este programa desde otro programa, que le indique cuál es la clave correcta a considerar) quedaría como: #include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char **argv) { char clave[21]; /* espacio para 20 caracteres, pues 5 es muy poco */ char clave2[21]; /* clave del usuario */ if ( argc < 3 ) { /* salir si hay menos de tres argumentos */ printf("faltan argumentos\n"); return 1; } if ( !strcmp( argv[1], "-pass" ) ) { strncpy( clave, argv[2], 20 ); clave[21] = '\0'; } else return 1; printf("Escriba su clave: "); scanf("%s", clave2); while ( getchar() != '\n' ) ; if ( !strcmp(clave, clave2) ) /* <-- ve aqui */ { printf("sencillo a ejecutar\n"); } else { printf("Clave no valida\n"); } return 0; }
Con te explicó engel, la declaración int main(int argc, char** argv)
se usa para leer argumentos de main por consola. El primer argumento argc corresponde al número de argumentos leidos, en este caso 3. Pues el propio nombre de tu programa se considera como un argumento. El segundo argv es un arreglo de cadenas, donde cada cadena corresponde a uno de los argumentos pasados al programa. Ejemplo: entonces, argc vale 3, y los elementos del array argv serán: en argv[0], la cadena "my programa" en argv[1], la cadena "-pass" en argv[2], la cadena "xyz" Ya con esta explicación creo que se entiende el resto del código fuente que te suministré. Al compilar y probarlo verás: ./test -pass xyz Escriba su clave: xyz sencillo a ejecutar
pues, se pide cotejar con la clave "xyz". Si introduce una clave distinta a la esperada: ./test -pass xyz Escriba su clave: abc Clave no valida
Pequeñas observaciones: - Como uso Linux, antecedo el nombre de programa a ejecutar con "./", pero tú no lo necesitas en Windows.
- La longitud de clave es muy pequeña, la cambié a 21, o sea 20 caracteres más el NULO de terminación. Nunca se te olvide sumar el NULO de terminación.
- strcpy() requiere la cabecera <string.h>
- ¿¿¿Para qué haces: system("echo sencillo a ejecutar")??? ... Es lo mismo que printf("sencillo de ejecutar\n"), y no se si has leído que se debe evitar en lo posible el uso de la orden system por ser muy dependiente del SO.
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
sabeeee
Desconectado
Mensajes: 155
|
Excelente entonces, eliminaría el scanf y seria: #include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char **argv) { char clave[21]; /* espacio para 20 caracteres, pues 5 es muy poco */ char clave2[21] = "hola"; /* clave del usuario */ if ( argc < 3 ) { /* salir si hay menos de tres argumentos */ printf("USO: programa -pass \"clave\" \n"); return 1; } if ( !strcmp( argv [1], "-pass" ) ) { clave[21] = '\0'; } else return 1; { printf("sencillo a ejecutar\n"); } else { } return 0; }
|
|
« Última modificación: 2 Enero 2015, 20:14 pm por sabeeee »
|
En línea
|
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él." Francis Bacon
|
|
|
Yoel Alejandro
|
Excelente !!!
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
sabeeee
Desconectado
Mensajes: 155
|
Muchas gracias a ambos, recomendaría agregar esto a la lista de ejemplos, para los novatos como yo es un poco difícil.
|
|
« Última modificación: 3 Enero 2015, 04:44 am por sabeeee »
|
En línea
|
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él." Francis Bacon
|
|
|
Yoel Alejandro
|
Por nada amigo. Por cierto, esa sintaxis que definiste " test -pass xyz" con el guión antes de la opción se parece a la típica de los comandos de UNIX y derivados. En Windows creo que es más usual el "/" (o sea " /pass" ) Visto que es así, y por lo visto tienes un alma inquieta y ávida de programación, ¿no has pensado en explorar Linux?
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
sabeeee
Desconectado
Mensajes: 155
|
yoel_alejandro, te comento, yo soy de Argentina, y a los estudiantes de secundaria (creo que en algunos países es universidad), nos regalan netbooks con la condición de que terminemos la escuela, y porque hay gente desafortunada que nunca pudo tener un ordenador (afortunadamente cada vez son menos), lo cual es excelente (cada vez con mejores especificaciones técnicas). Poseen Windows 7 (2015 traen Windows 8 sino me equivoco y 4gb de ram!) y una distro Huayra, basada en Ubuntu (creo) y es por eso y por una cuestión de "portabilidad" de que intento de que todos mis códigos sean compatibles con Linux, del cual yo no entiendo mucho pero me encantaría saber y el VirtualBox no me va, cuando tenga la net lo pruebo, la mande a desbloquear porque incluyen un chip TPM (hay muchos mitos y leyendas urbanas sobre el jajaja), para evitar ser robada, el cual es muy difícil de corromper, en las net nuevas (mi caso) y es verano acá por eso es que estamos de vacaciones, la escuela esta cerrada jajaja, voy por el ultimo añito ya. Veo que vos sabes mucho de C/C++, venís ayudando a todos, quizás te venga bien un cargo de "Colaborador" por lo menos ja. Edit esto es lo que te digo: http://www.taringa.net/posts/info/18186947/La-nueva-net-del-gobierno-2014-2015-con-4gb-de-ram.htmlhttp://ark.intel.com/es/products/79050/Intel-Celeron-Processor-N2806-1M-Cache-up-to-2_00-GHzhttps://www.youtube.com/watch?v=QcP-WS8wU20
|
|
« Última modificación: 5 Enero 2015, 02:37 am por sabeeee »
|
En línea
|
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él." Francis Bacon
|
|
|
Yoel Alejandro
|
Mmmm, se parece al programa que tiene el gobierno de Venezuela (mi país) con equipos llamados "Canaima", y un SO que dicen propio pero me parece más un clon de Ubuntu y encima sin dar los créditos, ......., en fin así son los políticos. Sí, trato de ayudar a los que puedo y sería un honor recibir el título de Colaborador, aunque no conozco los requisitos necesarios para ello. Y aunque no lo parezca, ayudando también se gana, he aprendido mucho respondiendo las preguntas aquí en el foro Saludos!
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOLUCIONADO] Puedo eliminar los parametros de los EVENTOS?
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Skeletron
|
10
|
8,167
|
22 Septiembre 2009, 11:35 am
por Jubjub
|
|
|
Ejecutar *.bat con parametros desde aplicación en VB 6.0
Programación Visual Basic
|
hellfire99
|
3
|
9,310
|
9 Diciembre 2009, 14:22 pm
por xkiz ™
|
|
|
[SOLUCIONADO] ¿Pasar parámetros a un servicio?
.NET (C#, VB.NET, ASP)
|
BlaineMonkey
|
6
|
11,112
|
14 Enero 2010, 17:15 pm
por BlaineMonkey
|
|
|
compilar directo desde consola(solucionado)
Programación C/C++
|
flony
|
0
|
2,371
|
28 Noviembre 2010, 23:34 pm
por flony
|
|
|
pasar parametros a otra consola...no a un segundo bat
Scripting
|
flony
|
3
|
3,639
|
3 Diciembre 2012, 10:55 am
por r7pyrred
|
|