Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较C程序中的浮点值时卡住了_C - Fatal编程技术网

比较C程序中的浮点值时卡住了

比较C程序中的浮点值时卡住了,c,C,我正在为一门嵌入式软件课程做作业,但我遇到了一个最奇怪的问题 使用以下代码: void decidePotato(float held) { printf("Deciding Potato, held for %f seconds \n", held); if (held >= 1.99) { printf("Held for more than 1.99s \n", held); returnPotato(); }

我正在为一门嵌入式软件课程做作业,但我遇到了一个最奇怪的问题

使用以下代码:

void decidePotato(float held)
{
    printf("Deciding Potato, held for %f seconds \n", held);
    if (held >= 1.99)
    {
        printf("Held for more than 1.99s \n", held);
        returnPotato();
    }
    printf("I evaluated the if statement above \n");

}
我得到以下输出:

Deciding Potato, held for 0.010000 seconds

我甚至没有看到“我评估了上面的if语句”消息,所以程序在评估if语句时不知何故被卡住了。在我重新编程电路板之前,它一直被卡住,这怎么可能呢?

不看returnPotato()就不可能知道。可能是因为你在返回马铃薯中被阻塞了,而printf没有冲洗

还请注意,您有

printf("Held for more than 1.99s \n", held);
而且您的格式字符串中没有要保存的%f。

我建议在函数末尾放一个fflush():即使使用新行,也可能是编译器有一个“奇怪”的实现

顺便问一下:您是否将输出重定向到文件?因为那样的话

无论如何,正如Scotty Bauer所注意到的,您必须在if块中更正printf:您可能还因此收到了编译器警告

来自
fflush
手册的注释:

如果stream参数为NULL,则fflush()将刷新所有打开的文件 输出流


通常您会执行
fflush(stdout)

如果您的程序确实卡住了,我会怀疑您通过调用
printf()
溢出了堆栈。然后,您的程序尝试跳转到未定义的内存或取消对垃圾指针的引用,并发生异常,并且它被锁定在默认异常处理程序中的无限循环中
printf
是嵌入式世界的奢侈品。您需要一个足够大的堆栈来处理它,尤其是您正在向复杂的设备驱动程序写入数据,或者驱动程序占用了太多内存

将堆栈大小更改为可用的最大值,然后查看程序是否更改


(对printf()有额外的参数)这不是一个好主意。这不是一个好主意,但是它们只是被忽略了。< />什么是在代码> RealtButh/Cube >?<代码> > Read Buth<代码>包含什么?我猜更多的东西是打印出来的,但被缓冲了,你看不到。简单地在C++程序中复制你的函数不会给我带来任何错误。你能发布一个什么样的错误吗?解决问题?尝试在代码中添加
fflush(stdout)
。有时消息在管道中被阻塞(尽管通常合理地假设应该启用行缓冲)如果
hold
0.010000
,那么如何联系到
returnPotato()
?哦,哇,我需要小睡一下!不管怎样,你仍然需要一个%f。我不推荐它。“hold超过”这将是一个谎言!一些编译器允许您调用一个不支持浮动的“微小的”
printf
。在
printf
中使用浮动是非常昂贵的。