Errores comunes en funciones y procedimientos en C

Función.- Es un conjunto de líneas de código, a las cuales se les pueden pasar valores como parámetros y su objetivo principal es regresar un valor.

Tienen una sintaxis muy particular, que si no es seguida al pie de la letra, no obtendremos el resultado deseado.

No pasar bien los parámetros
#include<stdio.h>
#include<stdlib.h>
int suma(numero 1, numero 2){
int resultado;
resultado=numero1+numero2;
return resultado;
}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(numero1,numero2));
}

En este caso, los parámetros correctos deberían ser (int numero1, int numero2). También se observa que no marca error y al parecer el programa corre de manera normal, el problema es cuando se tienen más funciones, pues puede que empiecen a surgir problemas.

Recordando, cuando creamos una función y queremos pasarle parámetros necesitamos indicar qué tipo de variable es.

Claro, esta especificación va sólo en la misma función, cuando se manda “llamar” sólo se introduce el nombre de la variable.

#include<stdio.h>
#include<stdlib.h>
int suma(numero 1, numero 2){
int resultado;
resultado=numero1+numero2;
return resultado;
}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(int numero1, int numero2));
}

Se observa un error debido a que la función está siendo llamada de manera incorrecta.

Regresar más de un valor

En el siguiente ejemplo podemos analizar que la función “suma” contiene dos variables, “resultado” que almacena el valor de “numero1" y “numero2" y “x” que almacena la sustracción de los dos valores.

#include<stdio.h>
#include<stdlib.h>
int suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;
return resultado;
rsturn x;
}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(numero1, numero2));
}\

A veces podemos llegar a confundirnos y tendemos a querer regresar más de un valor por función, lo cuál obviamente no sucederá.

Cuando tenemos más de un return por función, el programa tomará sólo la primera.

El primer return fue el de resultado (variable que almacenaba el valor de numero1 más numero2)
No regresar un valor

Si bien el objetivo de una función es regresar un valor, puede que lo omitamos a la hora de programar..

#include<stdio.h>
#include<stdlib.h>
int suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;

}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(numero1, numero2));
}

En la imagen podemos percatarnos que la función recibe como parámetro dos números enteros (dados por el usuario).

En la variable “resultado” estos se suman y en la variable “x” se restan, pero hay que recordar que una función sólo regresa 1 valor, en otras palabras, cuando omitimos el return, lo que nos regresará es el resultado de la última operación, en este caso “x” que es la resta de los dos números.

No declarar bien el tipo de función

Es importante tener presente que el tipo de función depende del tipo de dato que se desea regresar..

Por ejemplo si queremos una función que regrese el resultado de la división de dos números lo más conveniente sería una función “float” ya que muchas divisiones no son exactas.

#include<stdio.h>
#include<stdlib.h>
float suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;
return resultado;

}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(numero1, numero2));
}

En la imagen anterior la función es de tipo “float” y el valora regresar es el de ”resultado” que está declarada como “int” dentro de la misma.

Cuando se imprime la función el tipo de dato está dado como “int”, debido a esto cuando corramos el programa lo único que obtendremos es un 0.

En este caso tenemos dos alternativas, podemos cambiar el tipo de función a int para que coincida con la variable y el tipo de dato a imprimir, o podemos cambiar éstos a “float” para que toso quede dado en decimales.

Para resumir, un ejemplo de una función correcta:

#include<stdio.h>
#include<stdlib.h>
int suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;
return resultado;

}
int main(){
int numero1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i", suma(numero1, numero2));
}

Procedimiento.- Conjunto de código o subrutina que realiza una tarea especifica, a diferencia de la función, los procedimientos no regresan ningún valor.

Cuando tenemos funciones y/o procedimientos, éstos siempre tienen que estar arriba del main, si no, un error como estos podría aparecer…

#include<stdio.h>
#include<stdlib.h>
int main(){
pedir_valores();
}

int suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;
return resultado;
}
void pedir_valores(){
int numero 1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i",suma(numero1, numero2));
}

Aquí un ejemplo de un programa con funciones y procedimientos bien elaborados..

#include<stdio.h>
#include<stdlib.h>

int suma(int numero 1, int numero 2){
int resultado;
resultado=numero1+numero2;
int x;
x=numero1-numero2;
return resultado;
}
void pedir_valores(){
int numero 1;
int numero 2;
printf("Numero 1: ");
scanf("%i%*c", &numero1);
printf("Numero 2: ");
scanf("%i%*c", &numero2);
printf("La suma es: %i",suma(numero1, numero2));
}
int main(){
pedir_valores();
}
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.