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

Ayuda con codigo basico

Estas en el tema de Ayuda con codigo basico en el foro de C/C++ en Foros del Web. Hola, estoy haciendo una funcion muy basica, que tiene que tomar los argumentos que le envio y procesarlos, el codigo es el siguiente: int main ...
  #1 (permalink)  
Antiguo 05/07/2006, 08:45
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 19 años, 7 meses
Puntos: 1
Ayuda con codigo basico

Hola, estoy haciendo una funcion muy basica, que tiene que tomar los argumentos que le envio y procesarlos, el codigo es el siguiente:

int main (int argc, char *args[])
int c;
/* skip white space */
while ((c = getargv []) == ' ' || c == '\t')
;
/* process numbers */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* return end-of-file */
if (c == EOF) /* a CNTRL-D from keyboard */
return 0;
/* return single chars */
return c;

}

Pero me tira el siguiente error al compilar:
error: syntax error before "while"
Que estoy haciendo mal? Espero ayuda, gracias!
  #2 (permalink)  
Antiguo 05/07/2006, 08:49
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 19 años, 5 meses
Puntos: 24
Si mi compilador mental no me falla, te esta faltando la llave de apertura de la funcion main.

Saludos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #3 (permalink)  
Antiguo 05/07/2006, 08:51
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 19 años, 7 meses
Puntos: 1
Tu compilador mental no te fallo!! ahora me salta otro error
me dice
/tmp/cck9yoDc.o(.text+0x7d3): In function `main.0':
: undefined reference to `getargv'
collect2: ld returned 1 exit status

Ahora que me esta faltando?

Graciasssssssssssss
  #4 (permalink)  
Antiguo 06/07/2006, 07:45
lpz
 
Fecha de Ingreso: abril-2006
Ubicación: Argentina
Mensajes: 402
Antigüedad: 18 años, 8 meses
Puntos: 2
Parte fue mi culpa jej...

En el prototipo no es args, sino argv..

Estas haciendo referencia a un vector que no existe: getargv

En ese caso cambia args por argv (en el prototipo) y getargv por argv (en la condicion del primer while y en donde aparezca de nuevo)

edit:
Tambien lo que vi es que la asignacion que haces en el primer while puede que este mal.

c = argv []

No estoy seguro si eso le asignaria el primer elemento.. En todo caso hace c=argv o c=&argv[numero]

Fijate que el primer elemento del vector es el nombre del programa, asi que tendrias que poner:
c = argv [1] para tomar el primer argumento de la llamada.

Última edición por lpz; 06/07/2006 a las 09:08
  #5 (permalink)  
Antiguo 07/07/2006, 07:43
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 19 años, 7 meses
Puntos: 1
Hola! lo que quiero hacer es que tome los argumentos que le estoy pasando al llamar a la funcion ( no que me los pida por teclado)

Estuve haciendo los cambios que me decis pero tampoco me anda

{ int main (int argc, char *argv[]) {
int c;
printf("Procesando Liquidacion");
/* skip white space */
while ((c = argv[] ) == ' ' || c == '\t')
;
/* process numbers */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* return end-of-file */
if (c == EOF) /* a CNTRL-D from keyboard */
return 0;
/* return single chars */
return c;

}}
Se te ocurre otra cosa??
Graciasssssssssss
  #6 (permalink)  
Antiguo 07/07/2006, 13:12
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
te falta comprender un poco mas esto de los argumentos de main.

se supone que argv es un array de punteros y tu tomas el argv y lo asignas a c el cual es un int, para poder obtener valores de argv tienes que convertirlos de cadena a el valor requerido.

no recuedo muy bien ya que casi no uso estos parametros pero supongo que en estos tambien se guarda el nombre del programa

argc es el numero de parametros que tienen argv.

si tu programa requiere de 2 parametros entonces estos tienen que estar en argv[1] y argv[2], ya que supongo que en argv[0] esta el nombre del programa pero no esty tan seguro.

podrias hacer;

char nombre[80];
int valor1;
int valor2;

sscanf(argv[0], "%s", nombre);
sscanf(argv[1], "%i", valor1);
sscanf(argv[2], "%i", valor2);

si tus argumentos son mas puedes usar un bucle.
e ir verificando las cadenas obtenidas como lo intentaste antes
for(int i =0; i < argc; i++)
{

}

Saludos
  #7 (permalink)  
Antiguo 07/07/2006, 13:22
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 19 años, 7 meses
Puntos: 1
Gracias, lo inclui asi:

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

char nombre[80];
int valor1;
int valor2;
int valor3;

sscanf(argv[0], "%s", nombre);
sscanf(argv[1], "%i", valor1);
sscanf(argv[2], "%i", valor2);
sscanf(argv[3], "%i", valor3);

/* skip white space */
c = argc;
while (c == ' ' || c == '\t'){
/* while ((c = argv() ) == ' ' || c == '\t')*/
c = argc;
;
/* process numbers */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* return end-of-file */
if (c == EOF) /* a CNTRL-D from keyboard */
return 0;00;
/* return single chars */
return c;

}}

main()

Ahora me salta que en la ultima linea, donde llamo el main pasa lo siguiente:

inxcalc3.y:83: error: too few arguments to function `main'
inxcalc3.y:83: error: syntax error before '{' token
Probe con pasarle argumentos, pero me sale lo mismo..
Lo de token se refiere porque este codigo c es parte de una herramienta gnu (bison)

Graciasssssssssssssss
  #8 (permalink)  
Antiguo 07/07/2006, 13:39
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 19 años, 5 meses
Puntos: 24
No entiendo esa llamada al main.
Se supone que cuando ejecutamos un programa, se llama al main() automaticamente.

Ese error en la llamada ocurre porque estas llamando a la funcion main y no le estas pasando parametros, y tu definiste la funcion main con 2 parametros.
Si quieres llamar al main, tienes que pasarle los 2 parametros que definiste en la funcion.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #9 (permalink)  
Antiguo 07/07/2006, 15:53
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Generalmente main nunca se llama desde codigo, se supone que estas usando parametros en main por que no la llamars tu, de llamarla tu para que usar ese sistema mejor leerlos o ponerlos por default.

ademas main no se encierra en otro bloque mas.

mira, main es una funcion que no tendriamos que ver como tal ya que en realidad no la utilizaremos nosotros, esta la utilizara el Sistema operativo.(A menos que usemos recurcividad).

main es como si usaras Begin End.

los parametros de la funcion main se pasan por linea de comandos al llamar nuestra aplicacion.

en la consola de comandos del SO.

por ejemplo:

C:\ Ejemplo 100 250 23

algo asi.

en ese momento el SO llama a main del programa Ejemplo y la pasa los valores como parametro.

al hacer esto:

sscanf(argv[0], "%s", nombre);
sscanf(argv[1], "%i", valor1);
sscanf(argv[2], "%i", valor2);
sscanf(argv[3], "%i", valor3);

ya tienes los valores en tu programa listos para operar con ellos y retornar algun valor o escribirlos en la consola.

la verdad no entiendo tu codigo, es decir no entiendo el proposito de tu aplicacion.

en ningun momento veo la declaracion de NUM y sin embargo lo retornas.

argv() esta funcion no creo que exista.

en fin un buen de detalles,

supongo que estas aprendiendo C.

si es asi no estas empesando bien, ya que primero tienes que aprender los diferentes tipos que hay y como los maneja el C, la declaracion de variables, la declaracion y uso de funciones, etc.

Saludos.
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 18:09.