elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:27  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿Error en cabecera de funciones?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Error en cabecera de funciones?  (Leído 619 veces)
CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
¿Error en cabecera de funciones?
« en: 17 Diciembre 2011, 23:58 »

Codeblocks me tira un error en la línea 3 tal que:

Citar
error:expected ';', ',' or ')' before '&' token

Código
/*Código para intercambiar dos números*/
 
#include <stdio.h>
 
void Intercambiar(int &x, int &y);       //Linea 3
 
int main()
{
 
int num1, num2;
 
printf("Dame un numero: ");
scanf("%d", &num1);
 
printf("Dame otro numero: ");
scanf("%d", &num2);
 
Intercambiar (num1, num2);
 
printf("Los he intercambiado: %d %d", num1, num2);
 
return 0;
 
}
 
void Intercambiar(int &x, int &y)
{
 
int aux;
 
aux=x;
x=y;
y=aux;
 
}
 

No entiendo para nada porqué me da ese error. Si alguien me ayuda se lo agradecería. Un saludo.


« Última modificación: 18 Diciembre 2011, 00:05 por CarLiLlooo » En línea

Más que buenos principios prefiero mejores finales.
bdoX

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #1 en: 18 Diciembre 2011, 00:08 »

Debes aprende a usar bien punteros en C.

Código
/*Codigo para intercambiar dos números*/
 
#include <stdio.h>
 
void Intercambiar(int *x, int *y);
//void Intercambiar(int *, int *);       //tambien puede ser de esta forma
 
int main ( )
{
   int num1, num2;
 
   printf ( "Dame un numero: " );
   scanf ( "%d", &num1 );
 
   printf ( "Dame otro numero: " );
   scanf ( "%d", &num2 );
 
   Intercambiar (&num1, &num2);
 
   printf ( "Los he intercambiado: %d %d", num1, num2 );
 
   setbuf ( stdin, NULL );
   getchar ( );
 
   return 0;
 
}
 
void Intercambiar(int *x, int *y)
{
   int aux;
 
   aux = *x;
   *x = *y;
   *y = aux;
}
 
 

Lo que tu muestras es de C++


« Última modificación: 18 Diciembre 2011, 00:14 por bdoX » En línea

CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
Re: ¿Error en cabecera de funciones?
« Respuesta #2 en: 18 Diciembre 2011, 00:16 »

Verdaderamente sigo sin saber porqué, pero ahora funciona.

Mi profesora usa '&' antes de los argumentos que van a volver por referencia, igual que yo en las prácticas que hacemos en la universidad (con Codeblocks también) y sí funciona.

En los apuntes dice que usemos '&'. ¿Cómo es que funciona con '*' y no con '&'?

Saludos y gracias.
En línea

Más que buenos principios prefiero mejores finales.
bdoX

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #3 en: 18 Diciembre 2011, 00:36 »

C no admite void Intercambiar(int &x, int &y);, C++ si. A eso se le llama referencia, y de esta forma void Intercambiar(int *x, int *y); se le llama desreferencia. Fijate que el archivo sea guardado con *.cpp cuando lo hagas de esta forma void Intercambiar(int &x, int &y);.

Yo uso Dev-c++, si guardo tu programa *.c (Es de C) y compilo tu programa me da ese error, y si lo guardo con *.cpp (Es de c++) no me da error. No conozco todos los IDE's pero como todos saben, Dev-c++ puedo compilar codigo de C y de C++, pero tienes que tener cuidado con la extensión con la que guardas

PD: C++ también admite con *

La idea de la programación es que sea portable tu codigo, y que pueda compilar con cualquier IDE sin ningun problema (No quiero hablar de las plataformas). Si tu compilas un codigo en un IDE y ese IDE te admite cosas como por ejemplo que puedas compilar codigo C con extensión *.cpp despues vas a tener problemas cuando uses otro IDE. No puedes mezclar cosas, o programas en C, o en c++, no en ambos.

Saludos
« Última modificación: 18 Diciembre 2011, 00:50 por bdoX » En línea

CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
Re: ¿Error en cabecera de funciones?
« Respuesta #4 en: 18 Diciembre 2011, 01:45 »

O sea que es porque es C y no C++... En la uni igual se guarda automáticamente en .cpp

¿Sabes porque me arroja este código error en la misma zona?

Código
#include <stdio.h>
 
bool EsPrimo(char letra);
 
int main()
 
{
   int numero;
 
   printf("Dame un numero: ");
   scanf("%d", &numero);
 
   if (EsPrimo(numero)==true)
       printf("Es un numero primo");
 
   else
       printf("No es un numero primo");
 
   return 0;
 
}
 
bool EsPrimo(char letra)
{
   int numero, i, divisor;
   bool v=true;
   i=numero-1;
 
   do
   {
       divisor=numero%i;
       i--;
   }
   while(i>1 || divisor==0);
 
   if (divisor==0)
       bool v=false;
 
   return v;
 
}
 
 
 

Saludos y de nuevo gracias
« Última modificación: 18 Diciembre 2011, 12:16 por CarLiLlooo » En línea

Más que buenos principios prefiero mejores finales.
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #5 en: 18 Diciembre 2011, 02:05 »

Por lo mismo. El tipo de dato "bool" es específico de C++ y no es un tipo de dato del lenguaje C.
En línea
CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
Re: ¿Error en cabecera de funciones?
« Respuesta #6 en: 18 Diciembre 2011, 02:12 »

Me lo suponía, pero es que al intentar cambiar la extensión del archivo a .cpp se me ejecuta pero dice que el programa debe cerrarse inmediatamente y no funciona...

P.D.: He cambiado la librería a cstdio al pasarlo a C++
En línea

Más que buenos principios prefiero mejores finales.
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #7 en: 18 Diciembre 2011, 02:20 »

La variable "letra" no está definida en ningún lado, y la estás utilizando!
En línea
CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
Re: ¿Error en cabecera de funciones?
« Respuesta #8 en: 18 Diciembre 2011, 12:18 »

Perdón, ya lo cambié. Era 'numero' sobre lo que quiero que actúe la función.
Aún así me sigue saliendo el mismo problema... Se ejecuta, me pide el número, y dice que debe cerrarse.
En línea

Más que buenos principios prefiero mejores finales.
Ferno

Desconectado Desconectado

Mensajes: 282


Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #9 en: 18 Diciembre 2011, 15:28 »

¿En la función EsPrimo también lo cambiaste?
Fijate que le estás pasando algo por parámetro y no lo estás usando, además, declaraste otra variable "número" en dicha función, la cual NO estás inicializando y la estás utilizando para inicializar la variable "i".
Si esa variable número es la que pediste en la función main, no debes declararla nuevamente en la función EsPrimo, y debes pasarlo como parámetro.
En línea
bdoX

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #10 en: 18 Diciembre 2011, 15:47 »

Código
#include <stdio.h>
 
int EsPrimo (int numero);
//int EsPrimo (int); // también se puede de esta forma
 
int main ( )
{
   int numero;
 
   printf("Dame un numero: ");
   scanf("%d", &numero);
 
   if (EsPrimo (numero) == 1)
       printf("Es un numero primo");
 
   else
       printf("No es un numero primo");
 
   setbuf (stdin, NULL);
   getchar ( );
   return 0;
 
}
 
int EsPrimo (int numero)
{
   int i, divisor, v;
 
   v = 1;
   i = (numero - 1);
 
   do
   {
       divisor = (numero % i);
       i--;
   } while ((i > 1) && (divisor != 0));
 
   if ( divisor == 0 )
       v = 0;
 
   return v;
}
 
« Última modificación: 18 Diciembre 2011, 15:53 por bdoX » En línea

CarLiLlooo


Desconectado Desconectado

Mensajes: 333


Veni, vidi, vici


Ver Perfil WWW
Re: ¿Error en cabecera de funciones?
« Respuesta #11 en: 18 Diciembre 2011, 20:55 »

¿Y alguno sabe por qué el argumento por referencia (perimetro) no me sale bien al ejecutar el programa? Compila pero es obvio que ese no es el perímetro...

Siento preguntar tanto pero estoy teniendo problemas para entender esto.

Código
#include <stdio.h>
 
unsigned calcular_area(unsigned base, unsigned lado, unsigned &perimetro);
 
int main()
 
{
   unsigned lado, base, p;
 
   printf("Dime la base de tu rectangulo: ");
   scanf("%u", &base);
 
   printf("Dame el lado de tu rectangulo: ");
   scanf("%u", &lado);
 
 
 
   printf("Tu area es: %u y su perimetro %u", (calcular_area(base, lado, perimetro)), p);
}
 
unsigned calcular_area(unsigned base, unsigned lado, unsigned &perimetro)
 
{
   unsigned area;
 
   area=base*lado;
   perimetro=lado*2+base*2;
 
   return area;
 
}
En línea

Más que buenos principios prefiero mejores finales.
bdoX

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: ¿Error en cabecera de funciones?
« Respuesta #12 en: 19 Diciembre 2011, 00:53 »

Perimetro no está declarado dentro de la main(). No se como es que te compiló

Ecá está en C++ con referencia

Código
#include <iostream>
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned &perimetro);
 
using namespace std;
 
int main ( )
{
   unsigned lado, base, p;
 
   cout << "Dime la base de tu rectangulo: ";
   cin >> base;
 
   cout << "Dame el lado de tu rectangulo: ";
   cin >> lado;
 
   cout << "Tu area es: " << calcular_area (base, lado, p) << " y su perimetro es: " << p << endl;
 
   cin.ignore ( );
   cin.get ();
 
   return 0;
}
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned &perimetro)
{
   unsigned area;
 
   area = (base * lado);
   perimetro = (lado * 2) + (base * 2);
 
   return area;
}
 

En C++ pero con desreferencia

Código
#include <iostream>
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned *perimetro);
 
using namespace std;
 
int main ( )
{
   unsigned lado, base, p;
 
   cout << "Dime la base de tu rectangulo: ";
   cin >> base;
 
   cout << "Dame el lado de tu rectangulo: ";
   cin >> lado;
 
   cout << "Tu area es: " << calcular_area (base, lado, &p) << " y su perimetro es: " << p << endl;
 
   cin.ignore ( );
   cin.get ();
   return 0;
}
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned *perimetro)
{
   unsigned area;
 
   area = (base * lado);
   *perimetro = (lado * 2) + (base * 2);
 
   return area;
}
 

Y acá está en C

Código
#include <stdio.h>
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned *perimetro);
 
int main( )
{
   unsigned lado, base, p;
 
   printf ( "Dime la base de tu rectangulo: " );
   scanf ( "%u", &base );
 
   printf ( "Dame el lado de tu rectangulo: " );
   scanf ( "%u", &lado );
 
   printf ( "Tu area es: %u y su perimetro %u", calcular_area (base, lado, &p), p );
 
   setbuf (stdin, NULL)
   getchar ( );
   return 0;
}
 
unsigned calcular_area (unsigned base, unsigned lado, unsigned *perimetro)
{
   unsigned area;
 
   area = (base * lado);
   *perimetro = (lado * 2) + (base * 2);
 
   return area;
}
 

Saludos!!
« Última modificación: 19 Diciembre 2011, 01:41 por bdoX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines