編程計算器程序時,我遇到了兩個絆腳石。雖然我從計算器中獲得正確的結果並正確打印加法,減法和乘法,但我只是打印了除法結果的?
符號。請參閱下面的代碼。μ控制器上的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單片機的打印結果。
在調試器中,當用戶選擇的操作是分區「D」時,我確認float c具有正確的值,但它似乎沒有與它關聯的小數點,儘管它是一個浮點數。
第二個問題:
我不知道我是否可以使用字符的一個這樣的數組(字符串):
//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
然後在屏幕上輸出整個用戶輸入的命令字符串。
在'printf'中嘗試'(float)* val1/* val2'來代替'c' – 2012-01-07 06:22:01
同樣在你的第二個代碼中它應該是''\ n'' – 2012-01-07 06:23:31
@VinayakGarg:爲什麼在' printf()'調用有什麼區別? – 2012-01-07 06:38:30