Problema con Punteros en C

Iniciado por aaronas, 31 Marzo 2012, 18:13 PM

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

aaronas

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:

#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");
}


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.

Ferno

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:

function(Tk,Tz,fi);

durasno

#2
Hola! q raro yo no veo ningun error, podrias subir el codigo completo o la parte q declaras a Tz y Tk

Saludos
Ahorrate una pregunta, lee el man

aaronas

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.

Ferno

¿Es el code completo?
¿Y el main?

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

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


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.

durasno

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");   
}
Ahorrate una pregunta, lee el man

aaronas

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.

durasno

Ah ok! ahora ya entendi :)... Completando mas o menos seria asi:


#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-> y=Tz.x*sin(fi)-Tz.y*cos(fi);
  }

int main()
{
 struct point Tk;
 struct point Tz;
 float fi;
/*-----------------
aca pedis los datos para Tz
........................*/

 function(&Tk,Tz,fi);/* call */

 system("PAUSE");  
 return 0;
}
Ahorrate una pregunta, lee el man

david_BS

en lugar de system + "pause" podés usar

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



así no usás system