2 qq 26435647 qq_26435647 于 2016.03.08 10:54 提问

这段程序问题在哪里,编译后的结果让我很费解

#include
#include
int main()
{
float x,y,z,k;
char s,q;
printf("请输入加油量:\n");
scanf("%f",&x);
printf("请输入服务类型:\n");
printf("a.自己加\n");
printf("b.自助加\n");
scanf("%c",&s);
switch(s)
{
case 'a':
z=0.95;
break;
case 'b':
z=0.9;
break;
default:
printf("error");
}
printf("请输入汽油品种:\n");
scanf("%c",&q);
switch(q)
{
case 'a':
y=3.25;
break;
case 'b':
y=3.00;
break;
case 'c':
y=2.75;
}
k=x*y*z;
printf("所购汽油价格:%f\n",k);

Sleep(10000);
return 0;

}

4个回答

u013596119
u013596119   Rxr 2016.03.08 11:19
已采纳

这样就好了,scanf读取的是缓存区的字符,你上一个scanf输入的最后会有\n,就直接被下一个scanf读取了


#include <stdio.h>
int main()
{
float x,y,z,k;
char s,q;
printf("请输入加油量:\n");
scanf("%f",&x);
fflush(stdin);
printf("请输入服务类型:\n");
printf("a.自己加\n");
printf("b.自助加\n");
scanf("%c",&s);
fflush(stdin);
switch(s)
{
case 'a':
    z=0.95;
    break;
case 'b':
    z=0.9;
    break;
default:
    printf("error");
}
printf("请输入汽油品种:\n");
scanf("%c",&q);
switch(q)
{
case 'a':
y=3.25;
break;
case 'b':
y=3.00;
break;
case 'c':
y=2.75;
}
k=x*y*z;
printf("所购汽油价格:%f\n",k);
return 0;
}
qq_27819077
qq_27819077   2016.03.08 11:06

在读取服务类型的scanf语句前加个getchar();。你在输入第一个加油量后再缓存区里还有一个\n在,会被scanf()直接读入。

John_ToStr
John_ToStr   Rxr 2016.03.08 15:45

怎么个费解法,有一种情况,你这代码在vs 2012以上的版本是编译通不过的,提示scanf不安全换成scanf_s即可

还有你的代码逻辑有严重的问题。

John_ToStr
John_ToStr   Rxr 2016.03.08 16:09

记得每次在输入之前要清空输入缓冲区,否则的话次变量被赋予的只不是你想要的。
图片说明
图片说明
图片说明
图片说明

代码除了我改的还有很大的漏洞,请自行修改,这种防御式编程的思想很重要...

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
这样的同事,让我很感动!
昨天,他听说我国庆要回老家。今天,他居然“瘸”着腿去给我买来了带给家人的东西!而且象女孩子一样想得那么周到、细致! 以前由于工作原因,有时对他不够理解,甚至也有与他对抗的时候。为了网站的事,前段时间的心情变得很无赖、烦躁、郁闷,好多时候想发火!经过这段时间,我理解他了,感觉他心地其实特别好!我很少通过这种方式来“表扬”一个人,但我想表达自己此时的心情,所以就只言片语说上两句。最后,
数字计时钟程序,数字计时钟程序
大家帮我看看此程序问题在哪里,总是出错.大家帮我看看此程序问题在哪里,总是出错
vijos P1197 费解的开关 题解
#include #include #define STATUS 0 #define STEP 1 int queue[1000000][2]; int answer[1<<25]; int head = 0, tail = 0; void addToQueue(int status, int step){ queue[tail][STATUS] = status; qu
//写这段代码的时候,只有上帝和我知道它是干嘛的 ,现在,只有上帝知道
// 亲爱的维护者: 如果你尝试了对这段程序进行‘优化’,  并认识到这种企图是大错特错,请增加 下面这个计数器的个数,用来对后来人进行警告:  浪费在这里的总时间 = 39h /**  * 致终于来到这里的勇敢的人: 你是被上帝选中的人,英勇的、不辞劳苦的、不眠不修的来修改 我们这最棘手的代码的编程骑士。你,我们的救世主,   *人中之龙, 我要对你说:永远不要放弃,永远不要对自己失
一个让我很困扰的问题
最在做一个MUI的项目,本人做的是一个小说App,APP界面完成但困扰我的是,app就需要后台数据的管理,但是一个小说的内容的字数,大概上千万字,甚至跟多。而数据库的存储数据的量又达不到这么多,于是想了一个比较简单方式,就是让手机APP去访问网页中的小说内容。问题是怎样用APP去访问网页内容呢?在MUI里a标签的页面跳转是不起作用的。这很让人头疼,各位大佬有能解决这个问题的吗?有的话拜托回复我一下
Vijos P1197 费解的开关
Vijos P1197 费解的开关题目描述你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态10111 01101 10111 10000 11011在
南邮 OJ 1570 费解的开关
费解的开关 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 15            测试通过 : 6  比赛描述 你玩过“拉灯” 游戏吗? 25 盏灯排成一个 5x5 的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变
程序员思维方式
今天去设备部修电脑的时候,看到他们部门在讨论个
7-3 出租(20 分)
7-3 出租(20 分) 下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。 本题要求你编写一个程
下面这段代码要循环延时输出0 1 2 3 4,输出结果是否正确,若不正确请修改,并理
for(var i=0;i {        setTimeout(function()        {               document.write(i + " ");        },100); } 以上代码输出:5,5,5,5,5 修改如下: for(vari=0;i {        (function(i){               setTi