sprintf中的%f似乎不适用于TI 84 CE在线IDE

时间:2016-08-18 15:31:47

标签: c floating-point printf

当我在计算器上运行此程序时:

void main(void) {
    char *quot = malloc(10 * sizeof(char));
    char *rest = malloc(10 * sizeof(char));
    sprintf(quot, "%d", 5);
    printText(quot, 0, 0);
    sprintf(rest, "%f", 2.03);
    printText(rest, 0, 1);
}
我的TI 84 CE计算器的

printText功能:

void printText(const char *text, uint8_t xpos, uint8_t ypos) {
    os_SetCursorPos(ypos, xpos);
    os_PutStrFull(text);
}

这是我的计算器液晶显示屏上的输出:

5
%

有一个百分比代币而不是2.03,这背后的原因是什么?

我已经包含了这些库:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <tice.h> // this is for my TI84

1 个答案:

答案 0 :(得分:0)

由于计算器中的内存限制,

%f被禁用。浮点转换很昂贵。使用的C的方言是C89,这是最好的C。无论如何,您可以通过在makefile中添加以下行来为程序启用%f

USE_FLASH_FUNCTIONS := NO

但是,这将大大增加二进制文件的大小,因此建议实现%f的自定义受限版本。另外,此代码将执行与%f相同的操作,但是会将输出复制到字符数组。

void float2str(float value, char *str) {
    real_t tmp_real = os_FloatToReal(value);
    os_RealToStr(str, &tmp_real, 8, 1, 2);
}