Título: C++ argumentos en el main. Publicado por: #Aitor en 7 Mayo 2014, 05:23 am Muy buenas, estos días he estado practicando con c++, y me surgió un problema, mi intención es leer un string, y tranformar carácter por carácter a ASCII, si este es par, sumarle 1 y devolver el caracter, y si es impar, restarle uno y más de lo mismo.
Código
Hasta aquí funciona a la perfección, pero mi intención es ejecutarlo desde la consola. Para eso cambie el código añadiendo los argumentos típicos del main. Código
El problema se encuentra en la linea 23, básicamente, antes usaba Getline para así leer toda la linea, y que el string no se parase al leer el espacio, ahora el problema está en que al ejecutarlo por consola, únicamente lee hasta el espacio y no encuentro forma de usar el getline como argumento. No sé si me explico... Gracias de antemano!. Título: Re: C++ argumentos en el main. Publicado por: engel lex en 7 Mayo 2014, 05:42 am no entiendo... si ya capturas el mensaje por consola, entonces para que quieres el getline?
Título: Re: C++ argumentos en el main. Publicado por: #Aitor en 7 Mayo 2014, 05:47 am no entiendo... si ya capturas el mensaje por consola, entonces para que quieres el getline? Supongo que me expliqué mal. Lo que digo es que si lo hago sin argumentos con el getline capturo toda la linea y funciona sin problema, pero mi intencion es hacerlo desde el terminal. al no usar getline, solo captura UN UNICO string, de forma que si en la consola escribo: Ruta/Programa Hola que tal La consola me devuelve el Hola modificado pero ignora todo lo que hay después del espacio. Espero haberme explicado ahora mejor >_< Intenté solucionarlo con Código
Funciona pero el programa revienta y da un error de windows xD... EDITO Finalmente se me ocurrió hacer lo tipico de "Secuencias con centinela", y salir del programa cuando el usuario escriba una palabra en particular, en este caso !stop, en este caso me aseguro que si el string tiene una tabla de 100, y se usan 90, el for no recorra a la 91 y windows tire error, aún así me parece muuuy chapuza y me gustaría que alguien me pudiese dar una mejor solución. Aquí dejo el código por si a alguien le interesa. Código
Saludos! Título: Re: C++ argumentos en el main. Publicado por: eferion en 7 Mayo 2014, 09:04 am No he terminado de comprender el motivo por el cual usas la cabecera de entrada salida de C++ y luego usas las funciones de C en vez de cin y cout.
Código
Estás presuponiendo que te van a pasar 100 palabras... y eso no tiene que ser cierto... el número viene dado por argc, no puedes pasar de esa cantidad. Es decir, lo que viene siendo... Código
el array "frase" lo he mantenido porque imagino que tu idea es usarlo en cambios futuros... ahora mismo no sería necesario. Yo personalmente hubiese usado un contenedor en vez de un array "crudo", pero así también funciona. Título: Re: C++ argumentos en el main. Publicado por: #Aitor en 7 Mayo 2014, 14:07 pm No he terminado de comprender el motivo por el cual usas la cabecera de entrada salida de C++ y luego usas las funciones de C en vez de cin y cout. Código
Estás presuponiendo que te van a pasar 100 palabras... y eso no tiene que ser cierto... el número viene dado por argc, no puedes pasar de esa cantidad. Es decir, lo que viene siendo... Código
el array "frase" lo he mantenido porque imagino que tu idea es usarlo en cambios futuros... ahora mismo no sería necesario. Yo personalmente hubiese usado un contenedor en vez de un array "crudo", pero así también funciona. Hola gracias por responder, funciona pero no entiendo como >_< En principio no entiendo esta linea. Código
Y luego no termino de entender, por qué el programa no explota si la idea de Código
Es la misma idea qué: Código
Título: Re: C++ argumentos en el main. Publicado por: eferion en 7 Mayo 2014, 14:39 pm En principio no entiendo esta linea. Código
Puesto de otra forma: Código
Y luego no termino de entender, por qué el programa no explota si la idea de Código
Es la misma idea qué: Código
Efectivamente es lo mismo. La ventaja que tiene mi código es que puedes cambiar el 100 por cualquier otro valor sin necesidad de navegar por el código (imagínate que tienes que cambiar el 100 en 30 sitios diferentes... con mi código solo tendrías que cambiarlo en un solo sitio) El motivo por el que ya no explota no está ahí, sino en el bucle: Código
En tu versión, estás asumiendo que "max" es siempre 100 y eso es incorrecto... si solo pasas 3 palabras, "max" deberá valer 3, no 100 Título: Re: C++ argumentos en el main. Publicado por: rir3760 en 7 Mayo 2014, 14:55 pm El problema se encuentra en la linea 23, básicamente, antes usaba Getline para así leer toda la linea, y que el string no se parase al leer el espacio, ahora el problema está en que al ejecutarlo por consola, únicamente lee hasta el espacio y no encuentro forma de usar el getline como argumento. Cuando se llama a tu programa con, por ejemplo:Código: nombre_del_programa arg_1 arg_2 arg_3 La solución fuera de tu programa es indicar que se pasa un solo argumento, para esto los delimitas con comillas dobles: Código: nombre_del_programa "arg_1 arg_2 arg_3" La solución dentro del programa (no hay forma de recuperar el espacio blanco) es crear la cadena manualmente, solo tienes que concatenar todos los argumentos pasados mediante la linea de comandos, una forma es: Código
Un saludo Título: Re: C++ argumentos en el main. Publicado por: #Aitor en 7 Mayo 2014, 15:06 pm Matarme por favor, lamento incordiar tanto.
Ahora no entiendo esto: Código
Entiendo la primera condicion pero no si no se cumple, entiendo que si el numero de argumentos supera a los 100, max tendrá 100 argumentos y no leerá el 101. Pero no entiendo: Código
Por qué el numero de argumentos -1? >_< y referente a lo que me cuentas rir3760, el código tiene punteros? lo digo por el *p aún no estudié eso. Código: El nombre de este se almacena en argv[0] y los argumentos de la linea de comandos son las palabras que siguen y se acceden con argv[ 1 ] .. argv[argc - 1] (argv[argc] es NULL). ?? Me vuelvo a perder en lo de argv[argc - 1], por qué no seguir la lógica y argv[ 2 ] Lamento molestar tanto de verdad xD... Título: Re: C++ argumentos en el main. Publicado por: rir3760 en 7 Mayo 2014, 16:20 pm Pero no entiendo: Porque argc es el numero de argumentos incluyendo el nombre del programa, como este no lo vas a procesar se resta uno.Código Por qué el numero de argumentos -1? y referente a lo que me cuentas rir3760, el código tiene punteros? lo digo por el *p aún no estudié eso. El problema es que argv es de tipo "char **", utilices el operador "*" o "[]" ya están trabajando con punteros.Me vuelvo a perder en lo de argv[argc - 1], por qué no seguir la lógica y argv[ 2 ] Porque no puedes saber de antemano el numero de argumentos que se pasaran al programa.Un saludo Título: Re: C++ argumentos en el main. Publicado por: #Aitor en 7 Mayo 2014, 16:32 pm Ahora sí lo entendí, no me había quedado claro que argc es el número de argumentos, y me estaba volviendo loco pues no sabia como el bucle sabia que tenía que terminar cuando se acabasen los argumentos.
Ahora todo encaja xD! Muchísimas gracias a los dos ;P doy el tema como resuelto. Saludos! |