Por partes:
* La función scanf con casi todos los especificadores como "%d", "%s", etc. lo primero que hace es descartar el espacio blanco, tomando tu programa como ejemplo no hay problema al introducir (cuando se pide la deuda):
Pero con los especificadores "%[]" y "%c" ese descarte no sucede, la función retorna el primer carácter que encuentre en el bufer de la entrada estándar.
* Regresando al ejemplo, al pedir la deuda si se introdujo:
La función scanf con "%f" descarta los espacios, con los caracteres "12.34" genera el numero y lo almacena en deuda[ i ], el avance de linea o '\n' se queda en el bufer de la entrada estándar y, cuando se llama a scanf con "%c", es almacenado en la variable resp.
* Para evitarlo se utiliza " %c", el espacio en la cadena de formato indica "leer y descartar una secuencia de cero o mas caracteres de espacio blanco". En otras palabras la función primero descarta los caracteres de ese tipo (en tu caso el avance de linea) y solo entonces lee un carácter y lo almacena en la variable resp.
* Por ultimo con scanf los caracteres ' ', '\t', '\n' no se toman literalmente (salvo dentro de "%[]"), en su lugar generan el comportamiento ya mencionado. Para explicarlo mejor puedes utilizar " %c", "\t%c", "\n%c" y el efecto sera el mismo.
Un saludo