Funcion obtener siguiente palabra

Iniciado por codX, 24 Julio 2019, 00:57 AM

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

codX

Hola, estoy estudiando el libro de c de Dennis Ritchie, el cual muestra la siguiente funcion para obtener la siguinete palabra de la etrada


/* getw ord:
obtiene la siguiente palabra o carácter de la entrada */

int getword (char *word, int lim)
{
int c, getch(void);
void ungetch(int);
char *w = word;
while (isspace(c = getch()))
        ;
if (c != EOF)
      *w++ = c;
if (!isalpha(c)){
      *w = '\0 ';
       return c;
}
for ( ; --lim > 0; w++ )
        if (!isalnum (*w = getch())) {
                ungetch(*w );
                break ;
        }
*w = '\0 ';
return word[0];
}
I


Lo que me tiene un poco desorientado son las 2da. y 3ra. línea del programa, que usa sintaxis para declarar variables, pero está llamando o funcioes. Ya lo he visto en otra parte del libro y no logro entenderlo. Si alguien puede explicarme, agradezco.

@XSStringManolo

Es lo mismo que cuando haces:
int numero = 1;
int numeroA = 2;

Las funciones tienen tipos al igual que las variables.
El ejemplo más obvio es la función main() del tipo int.

Cuando las funciones son de un tipo que no es void, siempre tienen un return.
bool funcion1()
{
// SI PASA ESTO:
return true;

else
{
return false;
}

}

Elr return de una función se puede asignar a una variable ya que lo que jave es sacar un valor de la función.

Cuando haces por ejemplo bool MiVariableBooleana = funcion1(); la función se ejecuta hasta que haga return. En el momento que se encuentre un return se devuleve el control a la función principal int main() con el valor que retornó la función para ser asignada a la variable.

codX

String Manolo, gracias. las líneas que no entiendo o las declaraciones mejor dicho son

getch(void);
void ungetch(int);

qué tipo de declaracion es esa? porque está dentro de la función. Perdoná que sea duro ja

RayR

En realidad en esas dos líneas no se está llamando a ninguna función; simplemente se están poniendo sus prototipos. Aunque normalmente se ponen al inicio del código y fuera de cualquier función, nada impide hacerlo dentro del cuerpo de una función, como en este caso. La única diferencia es que en este caso, sólo podrán ser invocadas desde la función o funciones que tengan los prototipos.

codX