Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: darking664 en 7 Septiembre 2013, 22:25 pm



Título: [SOLUCIONADO][Ayuda]Parametros en la funcion main con Geany, C++
Publicado por: darking664 en 7 Septiembre 2013, 22:25 pm
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.


Título: Re: [Ayuda]Parametros en la funcion main con Geany, C++
Publicado por: 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 y usa:

Código:
./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
  1. ...
  2. cout<<"\n"<<argv<<"\n";
  3. ...
  4. n=atoi(argv);
  5. ...

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

Código
  1. ...
  2. cout<<"\n"<<argv[i]<<"\n";
  3. ...
  4. n=atoi(argv[i]);
  5. ...

Esto no debería funcionarte en Debian:

Código:
system("PAUSE");

Saludos.


Título: Re: [Ayuda]Parametros en la funcion main con Geany, C++
Publicado por: darking664 en 7 Septiembre 2013, 23:12 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 >>

Código:
./nombrePrograma 1 2 3 4 5 6

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

Código
  1. ...
  2. cout<<"\n"<<argv[i]<<"\n";
  3. ...
  4. n=atoi(argv[i]);
  5. ...



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




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

:D :D


Título: Re: [Ayuda]Parametros en la funcion main con Geany, C++
Publicado por: ecfisa en 7 Septiembre 2013, 23:27 pm
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
  1. for(int i=0;i<argc;i++)
  2.   {
  3.   cout<<"\n"<<argv<<"\n";
  4.   }  

Debería ser por ejemplo:
Código
  1.  for(int i=0;i<argc;i++)
  2.    cout << argv[i] << endl;
  3.  

En definitiva, de este modo creo que tendría que funcionarte:
Código
  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.  
  7.  float t, sum = 0;
  8.  
  9.  // Mostrar parámetros
  10.  std::cout << "Parametros recibidos: ";
  11.  for (int i = 1; i < argc; i++)
  12.    std::cout << argv[i] << " ";
  13.  std:: cout << std::endl;
  14.  
  15.  // Calcular promedio
  16.  for (int i = 1; i < argc; i++) {
  17.    std::istringstream(argv[i]) >> t;
  18.    sum += t;
  19.  }
  20.  if ((argc-1) > 0)
  21.    std::cout << "Promedio: " << sum / (argc-1) << std::endl;
  22.  return 0;
  23. }
  24.  

Saludos :)

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



Título: Re: [Ayuda]Parametros en la funcion main con Geany, C++
Publicado por: darking664 en 8 Septiembre 2013, 03:42 am
Código:

En definitiva, de este modo creo que tendría que funcionarte:
Código
  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.  
  7.  float t, sum = 0;
  8.  
  9.  // Mostrar parámetros
  10.  std::cout << "Parametros recibidos: ";
  11.  for (int i = 1; i < argc; i++)
  12.    std::cout << argv[i] << " ";
  13.  std:: cout << std::endl;
  14.  
  15.  // Calcular promedio
  16.  for (int i = 1; i < argc; i++) {
  17.    std::istringstream(argv[i]) >> t;
  18.    sum += t;
  19.  }
  20.  if ((argc-1) > 0)
  21.    std::cout << "Promedio: " << sum / (argc-1) << std::endl;
  22.  return 0;
  23. }
  24.  

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.