le estás diciendo al scanf que lea caracteres, el scanf no asume el espacio un caracter, así que el lee lo que hay antes del primer espacio, lo saca del buffer y termina, entonces se repite tu funcion, pero ahora tienes un buffer cargado, así que el repite la operacion por cada espacio... esto es util cuando vas a sacar datos diferentes como
puedes sacar hola como string, 1 como int y 2.3 como float
si no quieres que suceda ese error debes limpiar el buffer
esta es una linea que sirve para eso
lo que hace es leer hasta que consigue el enter
tambien
que usa la busqueda para en el buffer de entrada (stdin) pararse al final
ese es el asunto con C que es de más bajo nivel que casi todos los comunes y al programador le toca hacer las verificaciones que se asumen obvias pero esos huecos son los que dan real control