Foros del Web » Programación para mayores de 30 ;) » C/C++ »

declaración de argv y argc

Estas en el tema de declaración de argv y argc en el foro de C/C++ en Foros del Web. Hola. Tengo un problema bastante raro con un programa.Trabajo con linux y el error es el siguiente: Código HTML: argv no se declaró en este ...
 
Antiguo 20/04/2009, 03:17
boli-sp
Invitado
 
Mensajes: n/a
Puntos:
declaración de argv y argc

Hola.

Tengo un problema bastante raro con un programa.Trabajo con linux y el error es el siguiente:
Código HTML:
argv no se declaró en este ambito
Es bantante extraño ya que, tanto argv como argc, no lo debería declarar en ningún momento. Alguien sabe de que puede ser??

Gracias!!!
 
Antiguo 20/04/2009, 03:37
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

Hombre, los deberías declarar en la firma de la función main, no?

Código C:
Ver original
  1. int main(int argc, char *argv[]) {
  2. // ...
 
Antiguo 20/04/2009, 08:37
boli-sp
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

si, claro.

pero aquí la teoría me falla

se declaran donde tú bien dices, pero sólo se declaran aí y no más veces. pero cada vez que intento usar un argv o argc me da ese error


gracias por contestar!

Última edición por boli-sp; 20/04/2009 a las 08:52
 
Antiguo 20/04/2009, 08:44
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

Dónde los usas? Podríamos ver tu código?
 
Antiguo 20/04/2009, 09:25
boli-sp
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

gracias de nuevo por contestar.

este es el código:
Código:
#include "persona.hh"
#include "lista.hh"

bool errorComando(void);
bool errorSintaxis(void);
bool errorFichero(void);
bool tratamientoErrores(void);

int main(int argc, char **argv)
{ 
  if(tratamientoErrores()==false)
    {
     //código
    }
 
  return 0;
} 



bool errorComando(void)

{
  bool error=false;

  if(argc>=1)
    {
      if (argv[1]!="-nuevaPersona" || argv[1]!="-defuncion" || argv[1]!="-invertir" || argv[1]!="-baja")
	error=true;
    }
  else
    error=true;
  
  return error ;
}

bool errorSintaxis(void)
{
  bool error=false; 
  int longitud, i;
    
  if(argv[1]=="-nuevaPersona")
    {
      if(argc==5 || argc==7)
	{ 
	  int NPargv5=atoi(argv[5]);
	  longitud=strlen(argv[3]);
	  
	  if(argv[2]!="-n" || longitud>50)
	    error=true;

	  if(argv[4]!="-a" || NPargv5>9999 || NPargv5<1)
	    error=true;

	  if(argc==7)
	    {
	      longitud=strlen(argv[7]);
	      if(longitud>9)//hai que comprobar se son todo numeros
		error=true;
	      else
		{
		  longitud=strlen(argv[7]);
		  for(i=0; i<longitud; i++)
		    {
		      if(isdigit(argv[7][i])==0)
			error=true;
		    }   
		}   
	    }
	}
      else
	error=true;
    }

  if(argv[1]=="-defuncion")
    {
      if(argc==5)
	{
	  int Dargv3=atoi(argv[3]);
	  int Dargv5=atoi(argv[5]);

	  if(argv[2]!="-i" || Dargv3>9999 || Dargv3<1)
	    error=true;

	  if(argv[4]!="-a" || Dargv5>9999 || Dargv5<1)
	    error=true;
	}
      else
	error=true;
    }

  if(argv[1]=="-invertir")
    {
      if(argc!=1)
	error=true;
    }

  if(argv[1]=="-baja")
    {
      if(argc==5)
	{
	  int Bargv5=atoi(argv[5]);

	  longitud=strlen(argv[3]);
	  if(argv[2]!="-n" || longitud>50)
	    error=true;

	  if(argv[4]!="-a" || Bargv5<1 || Bargv5>9999)
	    error=true;
	}
      else
	if(argc==3)
	  {
	    int Bargv3=atoi(argv[3]);
	    if(argv[2]!="-i" || Bargv3<1 || Bargv3>9999)
	      error=true;
	  }
	else
	  error=true;
    }
  return error;
}

bool errorFichero(void)
{
  bool error=false;
  ifstream fichero;
  fichero.open("datos.txt");

  if(fichero.fail())
    error=true;

  fichero.close();
  return error;
}

bool tratamientoErrores(void)
{
  bool error;
  error=errorComando();

  if(error==false)
    error=errorSintaxis();
  if(error==false)
    error=errorFichero();

  return error;
}
solo pongo el main.cc que es donde se encuentra el programa principal.

espero una respuesta. gracias!

PD: como etiquetas el código C?

Última edición por boli-sp; 20/04/2009 a las 10:22
 
Antiguo 20/04/2009, 11:18
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

1. Para etiquetar código, usa el botón # del editor del foro o escribe el código entre [highlight=C]código[/highlight]

2. Tu problema es que estás intentando usar argv y argc fuera de la función main. argv y argc son los parámetros que se le pasan automáticamente a la función main, pero no son variables globales. Tendrás que pasarle argc y argv a las funciones que los vayan a usar.
 
Antiguo 21/04/2009, 08:49
boli-sp
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: declaración de argv y argc

gracias venkman!!

Última edición por boli-sp; 21/04/2009 a las 14:08
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta



La zona horaria es GMT -6. Ahora son las 13:31.