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

小丫么小菜鸡 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完全没有输进去,还报错, 求大神帮忙看看原因,谢谢了!


...全文
408 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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。

70,023

社区成员

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

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