Codeblocks me tira un error en la línea 3 tal que:
Citarerror:expected ';', ',' or ')' before '&' token
/*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.
Debes aprende a usar bien punteros en C.
/*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++
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.
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
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?
#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
Por lo mismo. El tipo de dato "bool" es específico de C++ y no es un tipo de dato del lenguaje C.
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++
La variable "letra" no está definida en ningún lado, y la estás utilizando!
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 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.
#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;
}
¿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.
#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;
}
Perimetro no está declarado dentro de la main(). No se como es que te compiló
Ecá está en C++ con referencia
#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
#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
#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!!