表达式求值(Expression Evaluation)
编写程序对表达式求值。
Enter an expression: 1+2.5*3
Value of expression: 10.5
表达式中的操作数是浮点数,运算符是+、-、*和/。表达式从左向右求值(所有运算符的优先级都⼀样)。
下面这个是我写的
#include <stdio.h>
int main() {
char a;
float b;
printf("Enter an expression:");
while (sizeof(a=getchar())==2)
{ b=(float)a;
a=(char)b;}
printf("Value of expression:%f",b);
return 0;}
他老是报错说:warning: ‘b’ is used uninitialized in this function
为什么啊,getchar不是一个一个输入的嘛?
你这个代码到处都是错误啊……
第一,直接把a转换为float,这是做什么?a存储的是ASCII码,简单而言,假如a=getchar()你输入了0,那么a获得的不是0,而是48,这是字符'0'的ASCII码。从题目上来看,我完全看不到直接用ASCII码的意义。
第二,你似乎试图用sizeof获取运行期的输入长度。但是sizeof是编译期运算符,不可能获得运行期的任何数据,编译期中,编译器就会解算sizeof内数据的类型,并根据类型的大小赋给sizeof结果,该结果直接在编译期硬编码到程序,因此不可能在运行期根据输入的不同而改变。由于getchar的返回值是int(不是char),这个sizeof永远都会获得4,除非你的机器是16位字长(现在已经非常少见了)。因此,你的while循环体在常见的机器上永远不会执行,因而b不会初始化。
为啥要用sizeof呢?while条件永远不成立的啊。sizeof(char)=1
由于while条件不成立,所以b=(float)a是不会执行的,导致printf语句执行时,b还没有赋值,所以编译器给出警告了