努力学C的啦 2023-10-18 08:03 采纳率: 56.5%
浏览 11
已结题

c语言do-while循环疑惑

img


到21后,立马重新输出12行内容,输入n,跳出循环,但是又会重复打印一遍printf语句

  • 写回答

3条回答 默认 最新

  • a5156520 2023-10-18 08:58
    关注

    第22行获取字符前,需要先清空缓冲区,否则会将前面输入数据时留下的换行符读入字符变量中,然后导致重新执行一次。

    修改如下:

    
    #include <stdio.h>
    
    int main(void){
        
        
        double ys=0,mj=0,sb=0,pg=0,xj=0;
        char zimu='a';
        int num;
        int amount;
        double sum=0;
        
        do{
            printf("请选择商品:\n");
            scanf("%d",&num);
        //    printf("num=%d\n",num);
            switch(num){
                case 1:
                    printf("请输入数量\n");
                    scanf("%d",&amount);
                    ys+=10*amount;
                //    printf("amount=%d,ys=%lf\n",amount,ys);
                    break; 
            }
            
            printf("请问还需要购买吗\n");
            while(getchar()!='\n'){ // 用于清除缓冲区剩余字符,以便下面的scanf()正确读取到相应字符 
                continue;
            } 
            scanf("%c",&zimu);
        //    printf("zimu=%c,%d\n",zimu,zimu); 
        }while(zimu!='n');
        //printf("zimu=%c,%d\n",zimu,zimu); 
        printf("商品为%d, ys=%lf\n",num,ys);
        
        return 0;
    } 
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月18日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题