【发布时间】:2015-08-30 02:24:48
【问题描述】:
我需要将 char 转换为 float。我知道我们可以在 atof() 函数的帮助下做到这一点。但我不想创建另一个变量来保存浮点数。我希望转换后的浮点数进入同一个变量。像这样
操作数 = atof(操作数)
这里的操作数是char类型。我也尝试过这样的投射
(float)operand = atof(operand)
但没用。
这是完整的代码:
#include <stdio.h>
#include <stdlib.h>
void main() {
float operand = 0.0F ;
char operator = '0' ;
printf("\nFollowing operators are supported : + - * / S E\n") ;
float acc = 0.0F ;
while((operand = getchar()) !=0 && getchar()==' ' && (operator = getchar()) != 'E') {
(float)operand = atof(operand) ;
switch (operator) {
case '+' : printf("\nAdd %f to Accumulator.\tResult : %f\n", operand , operand + acc);
acc+= operand ;
break ;
case '-' : printf("\nSub %f from Accumulator.\tResult : %f\n", operand, acc - operand);
acc-= operand ;
break ;
case '*' : printf("\nMultiply Accumulator with %f.\t Result : %f\n", operand, operand * acc);
acc = acc * operand ;
break ;
case '/' : printf("\nDivide Accumulator by %f.\tResult : %f\n", operand, acc / operand);
acc = acc / operand ;
break ;
case 'S' : printf("\nSet Accumulator to %f\n",operand) ;
acc = operand ;
break ;
default : printf("\nInvalid syntax\n") ;
}
}
}
欢迎任何帮助。
【问题讨论】:
-
这篇文章中XY problem 的香气几乎让人无法忽视。
-
@WhozCraig 。我在这里也提到了这个问题。我需要将 char 转换为 float 但不创建新变量。我希望转换后的值进入同一个变量。
-
@weston 变量总是要花一些钱。它只是归结为该成本对于您正在使用的系统是否重要。 EG 嵌入式与桌面系统。
-
@PeterM 严格来说,一个新的局部变量不一定会花费任何成本,因为编译器可能会将其优化为不存在。在像 OP 的代码这样的情况下(无论如何,它看起来不像是打算在嵌入式系统上运行),我认为这是一个非常现实的考虑。可读性获胜。让编译器优化。如果有必要,请稍后手动优化。
-
@PeterM XY 问题是您试图解决 X,但您不知道如何解决,并且您认为您需要 Y,但您也不知道如何解决。 ..所以你问Y。不,内存中的不同大小与XY问题无关,这里... Y是
atof。
标签: c floating-point char type-conversion