Foro de elhacker.net

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:

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.    scanf("%s%c", cadena);
  8.    for (i=0;cadena [i]!='\0';i++);
  9.    printf ("\nEl texto tiene %d caracteres.\n",i);
  10.    printf ("\nPresione ENTER para salir:");
  11.    while (getchar()!='\n')
  12.        ;
  13.    return 0;
  14. }

Y aqui el codigo usando una funcion:

Código
  1. #include <stdio.h>
  2.  
  3. int contador(int i, char letras){
  4. i = 0;
  5. for (i=0;letras [i]!='\0';++i);
  6. return i;
  7.  
  8. }
  9.  
  10. int main() {
  11.  
  12.    int x;
  13.    char cadena [80];
  14.    scanf("%s%c", cadena);
  15.    x = int contador(int i, char cadena);
  16.    printf ("\nEl texto tiene %d caracteres.\n", x);
  17.    printf ("\nPresione ENTER para salir:");
  18.    while (getchar()!='\n')
  19.        ;
  20.    return 0;
  21. }

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:

Código
  1. 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:

Código
  1. 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í:

Código
  1. #include <stdio.h>
  2.  
  3. int contador(char* letras){ //Es un array, no un solo carácter. No es necesario pasar "i" por parámetros.
  4. int i;
  5. for (i=0;letras [i]!='\0';++i);
  6. return i;
  7. }
  8.  
  9. int main() {
  10.    int x;
  11.    char cadena [80];
  12.    gets(cadena); //Scanf solo lee hasta el primer espacio. Para leer cadenas es recomendable usar gets
  13.    x =  contador(cadena); //No se ponen los tipos de las variables.
  14.    printf ("\nEl texto tiene %d caracteres.\n", x);
  15.    printf ("\nPresione ENTER para salir:");
  16.    while (getchar()!='\n')
  17.        ;
  18.    return 0;
  19. }
  20.  


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:
Código
  1. #include <stdio.h>
  2.  
  3. int contador(char* letras){
  4. int i;
  5. for (i=0;letras [i]!='\0';++i);
  6. return i;
  7. }
  8.  
  9. int main() {
  10.    char cadena [80];
  11.    fgets(cadena,80,stdin);/*con gets te puedes "pasar" de caracteres*/
  12.    printf ("\nEl texto tiene %d caracteres.\n",contador(cadena));
  13.    printf ("\nPresione ENTER para salir:");
  14.    while (getchar()!='\n')
  15.        ;
  16.    return 0;
  17. }
  18.  


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