[SOLUCIONADO][Ayuda]Parametros en la funcion main con Geany, C++

Iniciado por darking664, 7 Septiembre 2013, 22:25 PM

0 Miembros y 1 Visitante están viendo este tema.

darking664

Hola a todos...

Soy nuevo en este foro, me han hablado muy bien de esta pagina. No se si sea el lugar correcto para preguntar acerca de esto.

Actualmente estoy estudiando en la universidad, recibo clases de programación bajo le IDE DevC
y a mi no me agrada mucho estar usando Windows. Bueno dejare explicaciones para después...


Uso Geany en Debian... y hasta ahora no he podido la opcion para poder manejar los Parámetros...
Este es mi código fuente... es un programa sencillo que muestra los datos de los parámetros de main y muestra su promedio.



using namespace std;

int main(int argc, char *argv[])
{
cout<<"\nargc="<<argc;

   for(int i=0;i<argc;i++)
   {
   cout<<"\n"<<argv<<"\n";
   }

//Ahora aobtener promedio
int acum=0,n;
float prom;

   for(int i=2;i<argc;i++)
   {
   n=atoi(argv);
   //acum+=n;
   acum=acum+n;
   }

prom=(float)acum/(argc-2);
cout<<"\nEl promedio es: "<<prom<<"\n\n";


   system("PAUSE");
   return EXIT_SUCCESS;
}


Si alguien ha usado Geany... podría decirme como puedo ingresar loas parámetros a la función main. Se los agradecería mucho. :)
O en su defecto recomendarme otro programa para practicar.

Gracias y saludos.

Alien-Z

#1
Ejecuta el programa desde la consola de comandos y olvídate de la IDE, para ello dirígete a la carpeta donde se encuentra la aplicación compilada desde la consola y usa:

./nombrePrograma 1 2 3 4 5 6

Los números son los parámetros que le quieres pasar al programa, se almacenarán en el array "argv"; puedes insertar la cantidad que quieras.

Esto no está bien:

Código (cpp) [Seleccionar]
...
cout<<"\n"<<argv<<"\n";
...
n=atoi(argv);
...


Debes indicar la posición a la que quieres acceder:

Código (cpp) [Seleccionar]
...
cout<<"\n"<<argv[i]<<"\n";
...
n=atoi(argv[i]);
...


Esto no debería funcionarte en Debian:

system("PAUSE");

Saludos.

darking664

Cita de: Alien-Z en  7 Septiembre 2013, 22:55 PM


<< Ejecuta el programa desde la consola de comandos y olvídate de la IDE, para ello dirígete a la carpeta donde se encuentra la aplicación compilada desde la consola >>

./nombrePrograma 1 2 3 4 5 6

Debes indicar la posición a la que quieres acceder:

Código (cpp) [Seleccionar]
...
cout<<"\n"<<argv[i]<<"\n";
...
n=atoi(argv[i]);
...




Esta parte la uso con DevC:
system("PAUSE");




Modificando y Ejecutando...
de verdad Gracias por la rápida respuesta.

:D :D

ecfisa

#3
Hola

El primer parámetro de argv lo encontras en el índice 1 no en 0, por otro lado no estas indizando argv.

Por ejemplo cuando dice:
Código (cpp) [Seleccionar]
for(int i=0;i<argc;i++)
  {
  cout<<"\n"<<argv<<"\n";
  }  


Debería ser por ejemplo:
Código (cpp) [Seleccionar]

 for(int i=0;i<argc;i++)
   cout << argv[i] << endl;


En definitiva, de este modo creo que tendría que funcionarte:
Código (cpp) [Seleccionar]

#include <iostream>
#include <sstream>

int main(int argc, char* argv[])
{

 float t, sum = 0;

 // Mostrar parámetros
 std::cout << "Parametros recibidos: ";
 for (int i = 1; i < argc; i++)
   std::cout << argv[i] << " ";
 std:: cout << std::endl;

 // Calcular promedio
 for (int i = 1; i < argc; i++) {
   std::istringstream(argv[i]) >> t;
   sum += t;
 }
 if ((argc-1) > 0)
   std::cout << "Promedio: " << sum / (argc-1) << std::endl;
 return 0;
}


Saludos :)

Edito: Perdón, no había visto la respuesta de Alien-Z mintras escribía.



darking664



En definitiva, de este modo creo que tendría que funcionarte:
Código (cpp) [Seleccionar]

#include <iostream>
#include <sstream>

int main(int argc, char* argv[])
{

 float t, sum = 0;

 // Mostrar parámetros
 std::cout << "Parametros recibidos: ";
 for (int i = 1; i < argc; i++)
   std::cout << argv[i] << " ";
 std:: cout << std::endl;

 // Calcular promedio
 for (int i = 1; i < argc; i++) {
   std::istringstream(argv[i]) >> t;
   sum += t;
 }
 if ((argc-1) > 0)
   std::cout << "Promedio: " << sum / (argc-1) << std::endl;
 return 0;
}


Saludos :)

Edito: Perdón, no había visto la respuesta de Alien-Z mintras escribía.

Gracias a los dos... ahora pude terminar mis practicas... pero tendré muy en cuenta tu ejemplo.
Doy mi problema por solucionado..
:D :D

Saludos.