Я достиг двух блоков преткновения при программировании программы калькулятора. Хотя я получаю правильный результат от калькулятора и правильно печатаю для сложения, вычитания и умножения, я просто печатаю символ ?
для результата деления. См. Код ниже.C программирование на μ-контроллере: printf() и FDEV_SETUP_STREAM?
static void calculate(int *val1, int *val2, char *op){
float a = *val1;
float b = *val2;
float c = a/b;
/*
A stands for addition, B for sub, C for mul, D for div
I have already verified that the right operation is being
performed
*/
if(strcmp(op,"A")==0)
{
printf("%i \n\r", *val1+*val2);
}else if(strcmp(op,"B")==0)
{
printf("%i \n\r", *val1-*val2);
}else if(strcmp(op,"C")==0)
{
printf("%i \n\r", *val1 * *val2);
}else if(strcmp(op,"D")==0)
{
printf("%f \n\r", c);
}
}
Я использую реальный срок для вывода результатов с моего микроконтроллера atmega 32.
В отладчике я подтвердил, что float c имеет правильное значение, когда операция, выбранная пользователем, является разделом «D», но у нее не было десятичной точки, связанной с ней, хотя это поплавок.
второй вопрос:
мне было интересно, смогу ли я использовать массив символов (строку), как это:
//please note that below I am just simulating user keystrokes on a keypad attached to a
//microcontroller just for simplifying the problem.
char a[20] = {1,2,3,4,5,\n};
FILE keypad_str = FDEV_SETUP_STREAM(NULL, a, _FDEV_SETUP_READ);
То, что я пытаюсь выше пытается придумать стратегию чтобы я мог распечатывать каждый пользовательский ключ, нажмите сразу, а не keypad_str
stdin
, а затем распечатает всю строку введенной пользователем команды на экране.
Попробуйте '(float) * val1/* val2' вместо' c' в 'printf' –
Также в вашем втором коде должно быть' '\ n'' –
@VinayakGarg: Почему оценка в' printf() 'вызов имеет значение? –