鱼C论坛

 找回密码
 立即注册
查看: 978|回复: 1

[已解决]输入问题

[复制链接]
发表于 2020-8-17 17:22:20 | 显示全部楼层 |阅读模式
5鱼币
我这个循环有啥问题吗,为啥没有按顺序再执行m = getchar(),却执行了default
循环.png
  1. #include <stdio.h>
  2. int main(){
  3.         double price, tra_pac_cost, pounda, poundb, poundc, sumpound,suma, sumb, sumc;/*总菜价,运输与包装费用,输入洋蓟磅数,输入甜菜磅数,输入胡萝卜磅数,总磅数,总计洋蓟磅数,总计甜菜磅数,总计胡萝卜磅数*/
  4.         char m;//选择菜品
  5.         int n = 0;//输入失败计数
  6.         
  7.         printf("*********************************************************************");
  8.         printf("\nEnter the number corresponding to the your corresponding condition: ");
  9.         printf("\na) 洋蓟:2.05美元/磅\t\tb) 甜菜:1.15美元/磅");
  10.         printf("\nc) 胡萝卜:1.09美元/磅\tq) quit");
  11.         printf("\nn)进入下一步");
  12.         printf("\n*********************************************************************\n");
  13.         printf("Enter a number to select:\n");
  14.                 m = getchar();
  15.         while(1){
  16.                 switch(m)
  17.         {
  18.                 case 'a':printf("输入洋蓟的磅数:");
  19.                                          scanf("%lf", &pounda);
  20.                                                  suma += pounda;
  21.                                                  break;
  22.                 case 'b':printf("输入甜菜的磅数:");
  23.                                          scanf("%lf", &poundb);
  24.                                                  sumb += poundb;
  25.                                                  break;
  26.                 case 'c':printf("输入胡萝卜的磅数:");
  27.                                          scanf("%lf", &poundc);
  28.                                                  sumc += poundc;
  29.                                                  break;
  30.                 case 'q':goto quit;
  31.                 case 'N':goto NEXT;
  32.                 default :++n;
  33.                                          if(n%3 == 0)
  34.                                                      goto quit;
  35.                                                  else printf("输入失败\n失败三次将结束程序\n请输入a~c,退出请输入q\n");
  36.                                                  continue; }
  37.                                 printf("继续输入,按q退出, 按N进入下一步\n");
  38.                                 m = getchar();
  39.                                 continue;
  40.                                 NEXT:break;}
  41.                 printf("共订购洋蓟%lf磅,甜菜%lf磅,胡萝卜%lf磅\n");
  42.                 price = suma*2.05 + sumb*1.15 + sumc*1.09;
  43.                 if (price > 100)
  44.                     price *= 0.95;
  45.                 sumpound = suma + sumb +sumc;
  46.                 if (sumpound <= 5)
  47.                 tra_pac_cost = 6.5;
  48.             else if (sumpound > 5 && sumpound < 20)
  49.                 tra_pac_cost = 14;
  50.             else tra_pac_cost = (sumpound - 20)*0.5 +14;
  51.             printf("订购费用:%lf\n订购重量:%lf\n运费与包装费:%lf\n费用总额:%lf\n", price, sumpound, tra_pac_cost, price + tra_pac_cost);
  52.                 quit :printf("Bye!");
  53.                 return 0;
  54. }
复制代码
最佳答案
2020-8-17 17:22:21
第14行的getchar()获得一个字符之后,缓冲区还有一个字符'\n',所以你在第38行的getchar()获得到的字符是'\n'

解决办法就是在38 行之前在添加一句getchar()用于清除那个回车字符'\n'

最佳答案

查看完整内容

第14行的getchar()获得一个字符之后,缓冲区还有一个字符'\n',所以你在第38行的getchar()获得到的字符是'\n' 解决办法就是在38 行之前在添加一句getchar()用于清除那个回车字符'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-17 17:22:21 | 显示全部楼层    本楼为最佳答案   
第14行的getchar()获得一个字符之后,缓冲区还有一个字符'\n',所以你在第38行的getchar()获得到的字符是'\n'

解决办法就是在38 行之前在添加一句getchar()用于清除那个回车字符'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 01:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表