m0_62714396 2021-10-30 18:04 采纳率: 100%
浏览 46
已结题

getchar()到底咋用的呀!求帮我看看这个代码为什么错了

表达式求值(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不是一个一个输入的嘛?

  • 写回答

2条回答 默认 最新

  • include_iostream_ 2021-10-30 20:43
    关注

    你这个代码到处都是错误啊……
    第一,直接把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不会初始化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 10月30日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题