Прежде чем вы начнете смотреть на неподписанные символы, вызывающие проблему, присмотритесь к этой строке:
sprintf("the unsigned value is:%c",foo);
Первым аргументом sprintf всегда является строка, в которую будет напечатано значение. Эта строка должна выглядеть примерно так:
sprintf(str, "the unsigned value is:%c",foo);
Если вы не имели в виду printf вместо sprintf.
После исправления этого вы можете использовать% u в строке формата для вывода значения типа без знака.