Problema con avisos al compilar un programa en C

Iniciado por jamatbar, 27 Noviembre 2013, 15:36 PM

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

jamatbar

Buenas, tengo que hacer el siguiente programa:

potencia.c: realice un programa que obtenga la potencia de un número elevado a otro, dados ambos
por teclado. Para ello:
a ) escriba la función potencia, que recibe dos números como parámetros, la base y el exponente, y devuelve el resultado de elevar el primero al segundo.
b ) escriba la función leeNumero, que no recibe ningún dato como parámetro y solicita un número no negativo (mayor o igual que 0) por teclado, que devolverá como resultado. La función debe solicitar la introducción del número tantas veces como sean necesarias hasta que el número sea correcto (no negativo).
c ) escriba la función main, que haga uso de las dos funciones anteriores, para calcular la potencia de un número elevado a otro.

Pues bien, tengo hecho esto:

//Incluímos las librerías propias y del sistema
#include "potencia.h"
#include <stdio.h>

//Declaramos las funciones
int potencia(int base, int exponente);
int leeNumero();

int main()
{

//Declaramos las variables a usar
 int base;
 int exponente;
 int resultado;
 int numero;

 printf(T_BASE, base);
 base = leeNumero(numero);
 printf(T_EXPONENTE, exponente);
 exponente = leeNumero(numero);        //Llamamos a la funcion leeNumero

 resultado = potencia(base, exponente);        //Llamamos a la funcion potencia
 printf(T_RESULTADO, base, exponente, resultado);
 return 0;
}


int potencia(int base, int exponente)
{

 int resultado = 1;
 if (exponente == 0)
   {
     resultado = 1;
   }

 else
   {

     for (; exponente >= 1; exponente--)
       {
         resultado *= base;
       }
   }

 return resultado;
}

int leeNumero()
{
 int numero;
 do
   {
     printf(T_INTRODUZCA_NUMERO);
     scanf("%d", &numero);
   }
 while (numero < 0);


 return numero;
}


Este es el código de potencia.h:

#ifndef POTENCIA_H
#define POTENCIA_H

/*Textos a utilizar en la funcion printf*/
#define T_BASE              "BASE:\n"
#define T_EXPONENTE         "EXPONENTE:\n"
#define T_RESULTADO         "%d elevado a %d es %d\n"
#define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "

#endif


Pues bien, si lo compilo con el comando en consola:

gcc -W -Wall -o potencia potencia.c

Me salen los siguientes avisos:

salas@313CDC38:~/Escritorio/pfunciones2$ gcc -W -Wall -o potencia potencia.c
potencia.c: En la función 'main':
potencia.c:29:3: aviso: demasiados argumentos para el formato [-Wformat-extra-args]
potencia.c:31:3: aviso: demasiados argumentos para el formato [-Wformat-extra-args]
potencia.c:29:9: aviso: se utiliza 'base' sin inicializar en esta función [-Wuninitialized]
potencia.c:30:8: aviso: se utiliza 'numero' sin inicializar en esta función [-Wuninitialized]
potencia.c:31:9: aviso: se utiliza 'exponente' sin inicializar en esta función [-Wuninitialized]

¿Alguna forma de solucionarlo?

Compilándolo con el comando gcc -o potencia potencia.c me compila y hace lo que me piden, pero me gustaría tenerlo hecho sin que me de avisos. Gracias de antemano!

Saludos!

ivancea96

Curioso, a mi me compiló perfecto. (Code::Blocks - Mingw)

Veamos:

printf(T_BASE, base);
dado que T_BASE es "BASE:\n", quedaría:

printf("BASE:\n", base);

Ahí, la variable "base", no hace nada.

Igual pasa en el printf de T_EXPONENTE.

Cambiándole alguna cosa, me quedó así: //Incluímos las librerías propias y del sistema
#include <stdio.h>

#define T_BASE              "BASE:\n"
#define T_EXPONENTE         "EXPONENTE:\n"
#define T_RESULTADO         "%d elevado a %d es %d\n"
#define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "

//Declaramos las funciones
int potencia(int,int);
int leeNumero();

int main() /**Main**/
{

//Declaramos las variables a usar
  int base;
  int exponente;
  int resultado;
  int numero;

  printf(T_BASE);
  base = leeNumero(numero);
  printf(T_EXPONENTE);
  exponente = leeNumero(numero);        //Llamamos a la funcion leeNumero

  resultado = potencia(base, exponente);        //Llamamos a la funcion potencia
  printf(T_RESULTADO, base, exponente, resultado);
  return 0;
}


int potencia(int base, int exponente) /**Potencia**/
{

  int resultado = 1;
  if (!exponente)
    {
      return 1;
    }

  else
    {

      for (; exponente >= 1; exponente--)
        {
          resultado *= base;
        }
    }

  return resultado;
}

int leeNumero()  /**LeeNumero**/
{
  int numero;
  do
    {
      printf(T_INTRODUZCA_NUMERO);
      scanf("%d", &numero);
    }
  while (numero < 0);

  return numero;
}


En cualquier caso, parece que todo estea bien. Ignora esos avisos.

jamatbar

Sí, los ignoraré por que el programa funciona perfectamente xD

Gracias!