A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

屌丝写法,各位见笑了,这道题得到的启发是:如果一个源代码文件中需要多次从键盘等设备获取同类型内容,比如执行第15行代码获取char型,然后第31行又需要获取char型,那么如果没有第30行代码的清空输入区缓存,第31行是无法从键盘获取内容的,而应该是从缓存区获得了垃圾,从而第31行就达不到scanf函数的阻断效果了(它不会等在那傻等你输入,会直接跳过去,简直当你不存在!)。

  1. /*
  2. 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。(请用多分支选择switch语句)。
  3. */


  4. #include <stdio.h>

  5. int main(int argc, const char * argv[]) {
  6.    
  7.     //定义变量
  8.     double x,pay=0;
  9.     char a='a',b='b',c='c',z,y,f='f',m='m',e='e';
  10.     //提示用户输入,并接受数据
  11.     printf("请选择油品:'a'(6.92元/公升) 'b'(7.37元/公升) 'c'(7.64元/公升)\n");
  12.     scanf("%c",&y);
  13.     //判断输入合法性
  14.     if (y!='a' && y!='b' && y!='c') {
  15.         printf("你的语文是体育老师教的吧!\n");
  16.         return 0;
  17.     }else {
  18.         printf("请输入您要加的油量(公升):\n");
  19.         scanf("%lf",&x);
  20.         
  21.         //判断输入合法性
  22.         if (x<=0) {
  23.             printf("你个逗比,还能不能愉快的玩耍了!\n");
  24.             return 0;
  25.         }else {
  26.             printf("请选择服务等级:\n'f'—自动加(无优惠)'m'—自己加(优惠5%)'e'—协助加(优惠10%)\n");
  27.             rewind(stdin);
  28.             scanf("%c",&z);
  29.             //printf("输入内容是%c\n",z);
  30.             //z=f;
  31.             //判断输入合法性
  32.             if (z!='f' && z!='m' && z!='e') {
  33.                 printf("你真的是个逗比,不和你玩了!\n");
  34.                 return 0;
  35.             }else {
  36.                 if (y=='a'&&z=='f') {
  37.                     pay=6.92*x;
  38.                 }else if(y=='a'&&z=='m'){
  39.                     pay=6.92*x*0.05;
  40.                 }
  41.                 else if(y=='a'&&z=='e'){
  42.                     pay=6.92*x*0.1;
  43.                 }
  44.                 else if(y=='b'&&z=='f'){
  45.                     pay=7.37*x;
  46.                 }
  47.                 else if(y=='b'&&z=='m'){
  48.                     pay=7.37*x*0.05;
  49.                 }
  50.                 else if(y=='b'&&z=='e'){
  51.                     pay=7.37*x*0.1;
  52.                 }
  53.                 else if(y=='c'&&z=='f'){
  54.                     pay=7.64*x;
  55.                 }
  56.                 else if(y=='c'&&z=='m'){
  57.                     pay=7.64*x*0.05;
  58.                 }
  59.                 else if(y=='c'&&z=='e'){
  60.                     pay=7.64*x*0.1;
  61.                 }
  62.                 printf("您选择的是油品:%c,油量:%f(公升),服务等级:%c\n总费用是:%f\n",y,x,z,pay);
  63.             }
  64.     }
  65.    
  66.    
  67.    
  68.    
  69. }
  70.     return 0;
  71. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

20 个回复

倒序浏览
对的 我也写出来了
回复 使用道具 举报
365616804 发表于 2015-4-12 15:02
对的 我也写出来了

你也遇到同样的问题了?
回复 使用道具 举报
这题不是要求用switch语句吗。。
回复 使用道具 举报
我咋觉得这段时间发技术贴的都是咱班的
回复 使用道具 举报
Theshy 发表于 2015-4-12 16:01
这题不是要求用switch语句吗。。

两种都用
回复 使用道具 举报
guyinghua901018 发表于 2015-4-12 16:54
我咋觉得这段时间发技术贴的都是咱班的

都是为了那点黑马币,话说你这分够了,可以送我点黑马币。
回复 使用道具 举报
大路朝天 发表于 2015-4-12 19:39
都是为了那点黑马币,话说你这分够了,可以送我点黑马币。

报上姓名.一组的还在排队
回复 使用道具 举报
写得好  学习学习了
回复 使用道具 举报
bieny 中级黑马 2015-4-12 21:46:14
10#
:loveliness:
回复 使用道具 举报
// 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。(请用多分支选择switch语句)。


#include <stdio.h>


int  main(){

  //定义加油量x,加油品种y,服务类型z,油品单价m,服务价n,总体费用pay
    float x,m,n,pay;
    x=m=n=pay=0.0;
    char y,z;

    //提示用户选择加油量x,汽油品种y和服务类型z
    printf("1请输入加油量()升\n");
    scanf("%f",&x);
    printf("2请输入加油品种(a=6.92/元,b=7.37/元,c=7.64/元)\n");
    scanf("%*c%c",&y);

    printf("3请输入服务类型(f-自动加,m—自己加,e—协助加)\n");
    scanf("%*c%c",&z);
   
   
    //分析与流程
    switch (y) {
   
     case 'a':
        m=6.92;
        break;
     case 'b':
        m=7.37;
        break;
     case 'c':
        m=7.64;
        break;
    }
   
    switch (z){
   
     case 'f':
            n=0;
            break;
     case 'm':
            n=0.05;
            break;
    case 'z':
            n=0.1;
            break;
   
    }
    //计算
    pay=x*m-(x*m*n);
   
    //printf ("请输入加油量%f\n",x);
   // printf("你选择加油级别%c\n",y);
   // printf("你择服务类型%c\n",z);
    printf("你的加油总体费用是:%.2f元\n",pay);
   
  return 0;  
}
回复 使用道具 举报
我这样写也可以啊
回复 使用道具 举报
除了用scanf还能用别的吗?求解
回复 使用道具 举报
guyinghua901018 发表于 2015-4-12 19:50
报上姓名.一组的还在排队

四组的飘过
回复 使用道具 举报
365616804 发表于 2015-4-12 22:05
// 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了 ...

高手,报上姓名
回复 使用道具 举报
蓝鸟 发表于 2015-4-12 22:19
除了用scanf还能用别的吗?求解

貌似还有个getchar可以获得字符
回复 使用道具 举报
赞又涨姿势了
回复 使用道具 举报
365616804 发表于 2015-4-12 22:05
// 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了 ...

你这是大神写法,我的是屌丝写法
回复 使用道具 举报
好帖,赞一个
回复 使用道具 举报

你都23个了,马上就够啦.    你这都属于高富帅了,就给屌丝们留条活路,别要了啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马