Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Caster en 30 Septiembre 2012, 00:02 AM

Título: Problema con funcion
Publicado por: Caster en 30 Septiembre 2012, 00:02 AM
Pues en el libro que estoy leyendo he empezado con las funciones y para ir probando intente cambiar un codigo que tenia yo, usando una funcion, aqui el codigo original:

#include <stdio.h>

int main() {

   int i;
   char cadena [80];
   scanf("%s%c", cadena);
   for (i=0;cadena [i]!='\0';i++);
   printf ("\nEl texto tiene %d caracteres.\n",i);
   printf ("\nPresione ENTER para salir:");
   while (getchar()!='\n')
       ;
   return 0;
}


Y aqui el codigo usando una funcion:

#include <stdio.h>

int contador(int i, char letras){
i = 0;
for (i=0;letras [i]!='\0';++i);
return i;

}

int main() {

   int x;
   char cadena [80];
   scanf("%s%c", cadena);
   x = int contador(int i, char cadena);
   printf ("\nEl texto tiene %d caracteres.\n", x);
   printf ("\nPresione ENTER para salir:");
   while (getchar()!='\n')
       ;
   return 0;
}


Al compilarlo el segundo, me da los sigueintes errores:

En la funcion 'contador': 12:19: el valor del subindice no es ni matriz ni puntero ni vector

22:9 error: expected expression before 'int'

El primer fallo creo lo entiendo, se refiere al subindice de letras, letras, pero no entiendo el fallo, el segundo ya ni idea.

Saludos
Título: Re: Problema con funcion
Publicado por: DickGumshoe en 30 Septiembre 2012, 00:18 AM
Algunos errores que he encontrado:

- En el prototipo de la función, tienes que declarar "letras" como un puntero, puesto que sino estás declarando un carácter en vez de una cadena de caracteres:

int contador(int i, char *letras)

- Cuando en main llamas a la función, no tienes que poner el tipo de cada variable, es decir, debes poner esto:

x =  contador(i,  cadena);

- La variable "i" no es necesaria pasarla por parámetros, puesto que la declaras en la propia función y después devuelves el resultado.

- La función scanf solo lee las cadenas de caracteres hasta el primer espacio encontrado. Para leer cadenas es mejor usar gets. Por tanto, el programa quedaría así:

#include <stdio.h>

int contador(char* letras){ //Es un array, no un solo carácter. No es necesario pasar "i" por parámetros.
int i;
for (i=0;letras [i]!='\0';++i);
return i;
}

int main() {
    int x;
    char cadena [80];
    gets(cadena); //Scanf solo lee hasta el primer espacio. Para leer cadenas es recomendable usar gets
    x =  contador(cadena); //No se ponen los tipos de las variables.
    printf ("\nEl texto tiene %d caracteres.\n", x);
    printf ("\nPresione ENTER para salir:");
    while (getchar()!='\n')
        ;
    return 0;
}
Título: Re: Problema con funcion
Publicado por: leosansan en 30 Septiembre 2012, 00:42 AM
Todo puede ser más fácil, sobre todo usando funciones:
#include <stdio.h>

int contador(char* letras){
int i;
for (i=0;letras [i]!='\0';++i);
return i;
}

int main() {
    char cadena [80];
    fgets(cadena,80,stdin);/*con gets te puedes "pasar" de caracteres*/
    printf ("\nEl texto tiene %d caracteres.\n",contador(cadena));
    printf ("\nPresione ENTER para salir:");
    while (getchar()!='\n')
        ;
    return 0;
}
Título: Re: Problema con funcion
Publicado por: Caster en 30 Septiembre 2012, 08:59 AM
Ya funciona perfectamente, muchas gracias a los dos.

Saludos