Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda con programa que funciona bien

Estas en el tema de Duda con programa que funciona bien en el foro de C/C++ en Foros del Web. Buenas!! Una duda, he hecho un programa que me diga el numero de cifras que tiene un numero introducido por teclado a través de una ...
  #1 (permalink)  
Antiguo 30/07/2013, 02:21
 
Fecha de Ingreso: julio-2013
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
Duda con programa que funciona bien

Buenas!!

Una duda, he hecho un programa que me diga el numero de cifras que tiene un numero introducido por teclado a través de una función. La cosa es que me ha salido perfecto pero el compilador me saca este error:

Untitled.c:26:1: warning: control may reach end of non-void function [-Wreturn-type]

Mirad, este es el programa que he hecho:

Código:
#include <stdio.h>

int num_cifras (int numero);

int main() {
	int num, cifras;
	
	printf("Introduce un número:\n");
	scanf("%d", &num);
	cifras=num_cifras(num);
	printf("El número tiene %d\n", cifras);
	return 0;
}

int num_cifras (int numero){
	int cont=1;
	while (numero%10!=0) {
		numero=(numero/10);
		cont++;
		if (numero<=10) {
			return cont;
		}
	}
}
¿Qué ocurre con el return?

Gracias!
  #2 (permalink)  
Antiguo 30/07/2013, 03:44
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Duda con programa que funciona bien

El return está dentro de un "if". Por lo tanto, si no se llegase a cumplir la condición nunca se devolvería el valor. Yo lo evito poniendo el returno como última linea de las funciones.

Yo reescribiria la funcion de dos formas, llevando un booleando sabiendo cuando has de salir del bucle:

Código C++:
Ver original
  1. int num_cifras (int numero){
  2.     int cont=1;
  3.         int salir = 0;
  4.     while ((numero%10!=0)&&(salir==0){
  5.         numero=(numero/10);
  6.         cont++;
  7.         if (numero<=10) {
  8.             salir = 1;
  9.         }
  10.     }
  11.         return cont;
  12. }

O usando un break:

Código C++:
Ver original
  1. int num_cifras (int numero){
  2.     int cont=1;
  3.     while (numero%10!=0){
  4.         numero=(numero/10);
  5.         cont++;
  6.         if (numero<=10) {
  7.             break;
  8.         }
  9.     }
  10.         return cont;
  11. }

El break creo que es más óptimo, pero a nivel de diseño, quizás es más limpia la versión con el booleano.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 30/07/2013, 14:40
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Duda con programa que funciona bien

Una nota, no es un error sino un warning, una advertencia ;)
  #4 (permalink)  
Antiguo 30/07/2013, 16:08
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Duda con programa que funciona bien

como dice Malenko, si no entra en el if, no vas a tener valor de retorno....... proba ejecutar la funcion asi:

Código C++:
Ver original
  1. ...
  2. int Cifras= num_cifras(100);
  3. ...

con eso nunca va a entrar en el while, por lo tanto nunca va a alcanzar el return

Etiquetas: int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.