Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: aaronas en 31 Marzo 2012, 18:13 pm



Título: Problema con Punteros en C
Publicado por: aaronas en 31 Marzo 2012, 18:13 pm
Hola a tod@s, me gustaría que me ayudasen con un problema que tengo al hacer un programa usando punteros en C. El programa es el siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct point
  4. {
  5.  float x,y;
  6.            };
  7.  /* Function */
  8.  
  9.  void function(struct point *Tk, struct point Tz, float fi)
  10.  {
  11.  Tk-> x=Tz.x*cos(fi)-Tz.y*sin(fi);
  12.  Tk-> x=Tz.x*sin(fi)-Tz.y*cos(fi);
  13.       }
  14.  /* Call */
  15.  
  16.  function(&Tk,Tz,fi);
  17.  
  18.  system("PAUSE");
  19. }

Este programa me da error en la línea de: [ function(&Tk,Tz,fi);];
me pone:

- Conflicting types for 'function'
- Syntax error before '&' token

Si me podeis ayudar, os lo agradecería muchísimo.

Gracias de antemano.


Título: Re: Problema con Punteros en C
Publicado por: Ferno en 31 Marzo 2012, 21:03 pm
Antes que nada, utiliza las etiquetas GeSHi para postear código.

Sobre tu problema, es porque le estás pasando un puntero doble al invocar la función.
Tu variable "Tk" es del tipo (struct point*), por ende, ya es del tipo especificado en la función. No debes colocar el ampersand "&" cuando llamas a la función.
Simplemente:

Código
  1. function(Tk,Tz,fi);


Título: Re: Problema con Punteros en C
Publicado por: durasno en 31 Marzo 2012, 21:05 pm
Hola! q raro yo no veo ningun error, podrias subir el codigo completo o la parte q declaras a Tz y Tk

Saludos


Título: Re: Problema con Punteros en C
Publicado por: aaronas en 31 Marzo 2012, 21:32 pm
Se me paso Ferno, gracias.

Con respecto a quitar el ampersand '&', aunque lo quite sigue el mismo error, y además me pone:

- [WARNING] parameter names [without types] in function declaration.

Respondiendo tu pregunta durasno, el código está completo.

Muchas gracias por responder.


Título: Re: Problema con Punteros en C
Publicado por: Ferno en 31 Marzo 2012, 21:36 pm
¿Es el code completo?
¿Y el main?

Todo programa en C debe comenzar y terminar en la función main!

Código
  1. int main (int argc, char* argv[])
  2. {
  3. /*Código de tu programa*/
  4. }

La llamada a tu función "function" debe darse dentro del main!
(La declaración del struct (tipos) y la implementación de la función no).

EDIT: Agrego, las variables que vayas a utilizar en la llamada a la función también debes declararlas en algún lado, y en este caso, debe ser en el main.


Título: Re: Problema con Punteros en C
Publicado por: durasno en 31 Marzo 2012, 21:39 pm
Yo solo veo esto y no me parece todo el codigo

#include <stdio.h>
#include <stdlib.h>
struct point
{
  float x,y;
            };
  /* Function */
 
  void function(struct point *Tk, struct point Tz, float fi)
  {
  Tk-> x=Tz.x*cos(fi)-Tz.y*sin(fi);
  Tk-> x=Tz.x*sin(fi)-Tz.y*cos(fi);
       }
  /* Call */
 
  function(&Tk,Tz,fi);
 
  system("PAUSE");   
}


Título: Re: Problema con Punteros en C
Publicado por: aaronas en 31 Marzo 2012, 21:56 pm
Gracias durasno por responder,

El problema es que acabo de empezar con punteros, y ese es el código completo que nos dejó el profesor para que lo escribiésemos en el programa. Y no tengo ni idea. Es mi primera clase. Si puedieses decirme como sería la forma correcta, te lo agradecería.

Muchas gracias.


Título: Re: Problema con Punteros en C
Publicado por: durasno en 31 Marzo 2012, 23:17 pm
Ah ok! ahora ya entendi :)... Completando mas o menos seria asi:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct point
  4. {
  5.  float x,y;
  6.   };
  7.  /* Function */
  8.  
  9.  void function(struct point *Tk, struct point Tz, float fi)
  10.  {
  11.  Tk-> x=Tz.x*cos(fi)-Tz.y*sin(fi);
  12.  Tk-> y=Tz.x*sin(fi)-Tz.y*cos(fi);
  13.   }
  14.  
  15. int main()
  16. {
  17.  struct point Tk;
  18.  struct point Tz;
  19.  float fi;
  20. /*-----------------
  21. aca pedis los datos para Tz
  22. ........................*/
  23.  
  24.  function(&Tk,Tz,fi);/* call */
  25.  
  26.  system("PAUSE");  
  27.  return 0;
  28. }


Título: Re: Problema con Punteros en C
Publicado por: david_BS en 2 Abril 2012, 00:12 am
en lugar de system + "pause" podés usar

Código:
printf("Presione ENTER para continuar..\n");
while (getchar() != '\n');


así no usás system