El código es un poco extraño y difícil de seguir.
Podrías mejorar su legibilidad si te creas un vector con el valor de los billetes y monedas...
int[15] monedas = { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 }; // Billetes y monedas de Euro.
Con un vector así, calcular las vueltas resulta en un algoritmo sencillo de manejar y seguir:
int i;
for ( i=0; i<15; ++i )
{
int qt = diff / monedas[ i ];
if ( qt != 0 ) // Solo hacemos calculos si de la moneda actual hay que devolver algo
{
diff -= qt * monedas[ i ];
printf( "valor moneda: %f, cantidad: %d\n", (float)monedas
[ i
] / 100.0, qt
); }
}
Pero claro, si te tienes que ceñir a ese pseudocódigo no hay margen de maniobra.
Referente a tus errores, tienes 2:
* El del diff que dices, tiene toda la pinta de que se te ha colado un caracter no imprimible y es lo que está dando el error. Prueba a borrar la linea y reescribirla... a mi me ha compilado.
* Las comprobaciones de 50000, 5000, ... van con doble igual '==' con solo un igual estás haciendo una asignación.