gpt4 book ai didi

µ Controller 上的 C 编程 : printf() and FDEV_SETUP_STREAM?

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:09 24 4
gpt4 key购买 nike

我在编写计算器程序时遇到了两个绊脚石。尽管我从计算器中得到了正确的结果并正确打印了加法、减法和乘法,但我只是打印了除法结果的 ? 符号。请引用下面的代码。

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 微 Controller 的结果。

在调试器中,当用户选择的操作是除法“D”时,我确实确认 float c 具有正确的值,但它似乎没有与之关联的小数点,尽管它是一个 float 。

第二个问题:

我在想我是否可以像这样使用一个字符数组(一个字符串):

//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 和然后在屏幕上打印出用户输入命令的整个字符串。

最佳答案

在进行除法之前,您不会检查是否被零除。

不清楚为什么您总是做除法,即使运算是加法、减法或乘法。您应该只在必要时才进行除法:

else if (strcmp(op, "D")==0)
{
float a = *val1;
float b = *val2;
if (*val2 == 0)
printf("Divide by zero error\n");
else
{
float c = a / b;
printf("%f\n", c);
}
}

我将变量 c 留在原地,因为它可以更轻松地调试值。

这些都不能解释问号输出。

(您是否必须告诉 Atmega 32 微 Controller 上的 C 编译器在库中包含对浮点的支持?这可能是问号的原因。)

我会选择字符串 "+""-""*""/" 作为操作的助记符;然后我不会费心发表评论来解释这些操作的含义。

通常,您不会在格式中包含回车符。当您这样做时,它通常位于换行符之前,而不是之后。也不清楚为什么要在输出行末尾留一个空白。

关于 FDEV_SETUP_STREAM() 的一些问题需要我没有的知识。

但是,C 编译器应该告诉您:

char a[20] = {1,2,3,4,5,\n};

无效。您可能指的是其中任何一个;它们都有效,但不同:

  char a[20] = { 1, 2, 3, 4, 5, '\n' };
char a[20] = { '1', '2', '3', '4', '5', '\n' };

上面的初始化器可以缩写为:

 char a[20] = "\001\002\003\004\005\n";
char a[20] = "12345\n";

这强调了差异(不,双零不是绝对必要的,但有助于说明这一点)。

关于µ Controller 上的 C 编程 : printf() and FDEV_SETUP_STREAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com