我必须用C语言编写函数atof(),但只使用指针和代码的"骨架"必须如下所示:

#include <stdio.h>
#define SIZE 1024

float atof(char* s){
//here comes the code
}


int main(){

float f;
char a[SIZE];

scanf("%s", a);

f = atof(a);

printf("atof(\"%s\") = %f\n", a, f);

return 0;
}

有什么主意吗?

我试过这个:

 char integer_part[SIZE], decimal_part[SIZE];

   while(*s != '.'){
        *integer_part += *s++;
        *integer_part -= '0';
    }
return *integer_part;

预期代码会将字符串转换为浮点数.例如:atof("12")=12, Atof("123.456")=123.456,atof("-123.456")=-123.456,atof("-123.456e2")=-12345.6, Atof("-123.456e-2")=-1.23456

推荐答案

您可以使用sscanf(在<stdio.h>中定义):

float atof(const char *s) {
    float f;
    sscanf(s, "%f", &f);
    return f;
}

C++相关问答推荐

使用sd-设备列举设备导致seg错误

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

C中的__attributor__((aligned(4),packed))与 struct 的用法

手动矢量化性能差异较大

C指针概念分段故障

Boyer Moore算法的简单版本中的未定义行为

在C++中父进程和子进程中的TAILQ队列同步问题

判断系统命令返回值的正确方法

C-try 将整数和 struct 数组存储到二进制文件中

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

向左移位3如何得到以字节为单位的位数?

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

C 错误:对 int 数组使用 typedef 时出现不兼容的指针类型问题

比 * 更快的乘法

如何使用 raylib 显示数组中的图像

在带中断的循环缓冲区中使用 易失性

C23 中是否有 __attribute__((nonnull)) 的等效项?

为什么这里的符号没有解析?