关于程序代码错误求助! 小白求助~~~~~~

小丫么小菜鸡 2018-10-30 11:58:27

#include<stdio.h>
int main(void) {
int youhao;
int youliang;
char fuwu;
double price;
double sum;

scanf("%d", &youliang);
scanf("%d", &youhao);
scanf("%c", &fuwu);

switch(youhao) {
case 90: price = 6.95;
break;
case 93: price = 7.44;
break;
case 97: price = 7.93;
break;
}
if(fuwu == 'm') {
sum = price* youliang*0.5;
}else if(fuwu == 'e') {
sum = price*youliang*0.3;
}

printf("%.2f", sum);
}

-------------------------------------------------------------------------------------------以下是输出
40
97
问题.c:27:5: Error: Memory space at 0x100018(object 'sum') is not initialized
printf("%.2f", sum);
^^^^^^^^^^^^^^^^^^^
---------------------------------------------------------------------------------------------------------
本来我想输入youliang,youhao,fuwu的 可是程序强制输入两个就跳出了, fuwu完全没有输进去,还报错, 求大神帮忙看看原因,谢谢了!


...全文
391 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
scanf("%d", &youliang);
    scanf("%d", &youhao);
	getchar();
	//fflush(stdin);
    scanf("%c", &fuwu);
改成这样,即可解决; 原因跟楼上所说的一样,把上一个输入的换行作为了下一个fuwu的值,你如果调试就会发现fuwu的值为10,就是换行的Ascii码 另外C,变量必须要初始化才可以
棉猴 2018-10-31
  • 打赏
  • 举报
回复
scanf()函数都不能处理回车符。即把回车符看作再次输入的字符。例如

int ret_int;

char ret_char;

scanf(“%d”, &ret_int);

scanf(“%c”, &ret_char);


此时,在控制台中输入数字“5”然后按下回车键,此时ret_int的值是5,而ret_char的值是0x0a,即回车的ASCII码值。
请参考《scanf()、gets()和getline()读取输入》
[code=c]	int youhao;
int youliang;
char fuwu;
char huichefu;//---------------用来屏蔽回车符---------------
double price = 0.0;//------------赋初始值------------------
double sum = 0.0;//-------------赋初始值-----------------

scanf("%d", &youliang);
scanf("%d", &youhao);
scanf("%c", &huichefu);//-------屏蔽输入油耗时输入的回车符-------------
scanf("%c", &fuwu);

switch (youhao) {
case 90: price = 6.95;
break;
case 93: price = 7.44;
break;
case 97: price = 7.93;
break;
}
if (fuwu == 'm') {
sum = price* youliang*0.5;
}
else if (fuwu == 'e') {
sum = price*youliang*0.3;
}

printf("%.2f", sum);
[/code]
636f6c696e 2018-10-31
  • 打赏
  • 举报
回复
scanf用%c时会将输入的回车作为输入 因此你输入两个参数后,第二个参数后的回车就作为fuwu的入参了 可以这么改: scanf("%d", &youliang); scanf("%d\n", &youhao); scanf("%c", &fuwu); 还有你的编程习惯不是很好,建议变量先初始化。
绿色盒子 2018-10-31
  • 打赏
  • 举报
回复
报错不是 sum 没有初始化吗
自信男孩 2018-10-31
  • 打赏
  • 举报
回复
注意scanf是格式化输入函数,%d对应的就是0~9的字符,%c格式就是对应所有字母和数字了,包括换行符等其他字符
自信男孩 2018-10-31
  • 打赏
  • 举报
回复
scanf输入%c格式的比较特殊。如果在输入第二个%d回车时,换行符就赋值给了fuwu变量。解决办法是在输入第二个youhao后加一条语句:getchar();这调语句就是为了“吸收”上个变量%d格式残留在输入缓存里的'\n'。
林多 2018-10-31
  • 打赏
  • 举报
回复
你的程序在gcc5.4中,是不会崩溃的,会走常规的退出流程。不过程序处理上,确实不太对。问题,大概就像前面所说的。
但是有两点,有些问题。

1. scanf()函数都不能处理回车符??
2. 另外C,变量必须要初始化才可以??


scanf在某些情况下可以处理回车符。。。当输入为整数(%d)时,空格、回车都可以作为分割符。。当输入为字符(%c),如果输入的是空格或回车,会认为时输入的内容,赋给字符变量。。

C语言中,变量即使不初始化,也可以,只不过会报wranning。当然,某些老旧版本的C语言编译器,可能不初始化会Error。

【项目介绍】 基于java的流浪猫狗救助系统设计与实现源码+sql数据库+设计报告.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 流浪猫狗救助系统(Stray Pets Rescue System),是一个在大二下学期的``研究开发与实践``课程中完成项目。历时2个月,从设计数据库结构、API接口到业务实现、bug修改、功能添加和编写文档、测试用例,实现了较为完善的功能。 项目简介 该项目是一个救助和领养流浪猫狗的平台,实现了用户端的注册登录、修改用户信息、发布求助事件、请求领养、汇报宠物信息、查询帮助/待审核事件互发消息等功能,管理员端的登录、查询/拉黑用户,增删改查宠物/物资信息,审核用户请求等功能。 技术栈 该项目是使用**SpringBoot**、**Mybatis**、**Mysql**、**RabbitMQ**等框架、中间件实现的后端系统。 项目文档 [流浪猫狗救助系统项目文档.doc](流浪猫狗救助系统项目文档.doc) [数据库设计](sprs.sql) 流浪猫狗救助系统E-R图 ![数据库ER图](imgs/数据库ER图.png) **E-R图中实体介绍** 用户信息实体:用于存储用户的信息,包括用户昵称、邮箱、状态、密码等 黑名单记录实体:黑名单记录与用户关联,用户记录可以进入黑名单之中,黑名单定义了用户被加入黑名单的截止时间。 宠物信息实体:用于存储宠物信息,包括宠物姓名、性别、品种、年龄、健康状况等 领养记录:用于记录用户的领养信息,由于用户和宠物在领养管理是多对多的关系,所以需要此表对用户的历史领养信息进行记录 管理员信息实体:定义了管理员的各种信息,包括姓名、账号、密码、职位、权限等 待审核信息实体:定义了用户发起的待审核事件的信息,包括事件类型(求助、领养、汇报、登记等)、处理状态(待审核、通过、拒绝、撤销)、消息内容等 待登记宠物信息:定义了用户求助的待登记的宠物信息,包括目击地点、宠物品种、相关照片等 消息记录实体:定义了用户、管理员、系统三方之间的消息记录,包括发送者id,接收者id,消息内容、发送时间、是否已读等 帮助信息实体:定义了用户对另外一个用户的求助信息响应的内容,包括提供帮助者的id,求助事件id,响应内容,响应时间等 物资信息实体:定义了该公益组织的物资情况,包括物资名称、总数、剩余数量、品牌、单价等 **E-R图中实体联系** 用户可以多次进入黑名单记录中;用户可以领养宠物,领养记录实体用于存储用户的领养信息;用户可以向管理员发出许多待审核事件,比如申请领养宠物、登记路边看到的宠物信息、汇报领养后的宠物情况等,这些事件都被集中到了待审核事件实体中;待审核事件里面可能包含待登记的宠物信息,管理员可以查看并登记;用户和用户、用户和管理员、系统和用户之间的交流都记录在消息记录实体中;用户对其他用户求助信息的响应被存储在帮助信息实体中;管理员可以登记物资,登记的物资信息被存储在物资信息实体中 SPRS-1 用户UI包由9个软件模块组成 - SPRS-1.1 用户登录页 - SPRS-1.2 首页 - SPRS-1.3 个人信息页 - SPRS-1.4 知识百科页 - SPRS-1.5 领养中心页 - SPRS-1.6 宠物领养详情页 - SPRS-1.7 求助中心页 - SPRS-1.8 求助中心详情页 - SPRS-1.9 关于我们页 SPRS-2 管理界面UI包由7个软件模块组成 - SPRS-2.1 管理员登录页 - SPRS-2.2 管理员端信息管理页 - SPRS-2.3 用户管理页 - SPRS-2.4 流浪猫狗信息管理页 - SPRS-2.5 求助信息管理页 - SPRS-2.6 领养管理页 - SPRS-2.7 物资信息管理页 SPRS-3 实体包由18个软件模块组成 - SPRS-3.1 用户实体 - SPRS-3.2 管理员实体 - SPRS-3.3 用户基本信息实体 - SPRS-3.4 宠物实体 - SPRS-3.5 物资实体 - SPRS-3.6 待审核事件实体 - SPRS-3.7 简单消息实体 更多详情项目介绍请看资源内说明文档!

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧