Теперь это работает так, как должно. Ну, честно говоря, это была моя ошибка, но без некоторых из ваших вопросов было бы трудно избавиться от нее.
if ((key==11)^(key==13)^(key==16)^(key==17)) //this is the only
// dirty hack style string needed to fix this
{
switch (key)
{
case 11: { mode=0x01; break; } //plus
case 13: { mode=0x02; break; } //minus
case 16: { mode=0x03; break; } //multiply
case 17: { mode=0x04; break; } //divide
}
if (mode)
{
buffer=atof(display);
firstop=1;
first=1;
redraw=1;
//and to delete the goto
}
}
Вы никогда не перезагружаете режим, поэтому однократное нажатие будет продолжать делать выбранный режим для любого другого ключа.
Вы не определяете инструкцию по умолчанию в операторе switch
Попробуйте сыграть с переключателями оптимизации компилятора. Если он решает вашу проблему, то это, вероятно, volatile
проблема, когда режим оптимизируется
goto
считается плохой практикой. Почему бы просто не поместить//some other code here
в ветку else? Также ваш отступ ужасен.