Problema con funcion

Iniciado por Caster, 30 Septiembre 2012, 00:02 AM

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

Caster

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

DickGumshoe

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;
}

leosansan

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;
}

Caster

Ya funciona perfectamente, muchas gracias a los dos.

Saludos