Надо инициализировать все локальные переменные при объявлении. у меня такое было. (объявлена переменная int, а затем она передавалась в функцию по ссылке, где менялась только младшая часть (один байт). так как старший байт был неинициализированным (случайным), при дальнейшем анализе возвращаемого значения происходил глюк.
Думаю, у вас то же самое или в таком же духе.
Код
int buf;
getchar(&buf);
if(buf ... )
..
Надо исправить на
int buf = 0;