不叫灯笼椒 2022-03-22 19:54 采纳率: 100%
浏览 57
已结题

C语言的if else嵌套

做个找零练习,然后是输入商品的金额price和支付的面额bill,如果bill大于等于price,则找零,否则提示需补多少差价,是否补差价,是就让继续输入面额,如果补的差价(buchajia)大于等于price,则显示找零,如果小于price则提示重新购买,还会显示第一次和第二次(继续输入的面额)给的金额,总共退还多少。

现在运行这个的问题出在,若第二次输入的面额仍然小于需补差价的数,它最后提示的第二次输入的面额为0了,不是原本第二次输入面额的数了。而且也试过在其中插入print显示bill和price的值,发现是如果bill在前,bill可以正常显示,price变为0,如果price在前,bill在后,就是变为price是之前的数值,bill变为0了(bill和price在最开始的定义的顺序)(T▽T)

代码如下:
#include <stdio.h>
int main()
{
/定义需支付金额/
int bill=0,price = 0;
// 定义找零,所给金额,所给面额
// int bill ;
printf("请输入需支付金额和面额:\n");
scanf("%d %d",&price,&bill);
// printf("请输入你所给的金额:\n");
// scanf("%d",&bill);
//当所给金额大于需支付金额
if(bill >= price){
printf("需支付%d,您支付了%d,找您%d元!",price,bill,bill-price);
}else{
int cha = price-bill;
printf("支付失败!需支付%d,您支付了%d,请您再支付%d元!",price,bill,cha);
char cont;
printf("是否继续补充金额,"是"输入"y","否"输入"n":");
scanf("%s",&cont);
if(cont == 'y'){
int buchajia;
printf("%d",bill);//测试用
printf("%d",price);//测试用
printf("请输入您补充的金额:\n");
scanf("%d",&buchajia);
if(buchajia >= cha){
printf("您需补的金额为%d,您后续补充支付了%d,找您%d",cha,buchajia,buchajia-cha);
}else{
printf("您所补充的金额不足,请重新购买!\n");
printf("%d",bill);
printf("需支付金额%d元,您第一次支付了%d元,还需在支付%d元,您第二次支付了%d元,需总共退还您%d元",price,bill,cha,buchajia,bill+buchajia);
}
}else{
printf("取消购买。需支付金额%d元,您支付了%d元,退还您%d元
",price,bill,bill);
}
}
return 0;
}

img

有没有人帮忙看看(;へ:)( Ĭ ^ Ĭ ),谢谢大家了!

  • 写回答

3条回答 默认 最新

  • 关注

    你的cont是char类型,但是输入的时候是%s控制的,所以出错

    img

    修改之后:

    img

    #include <stdio.h>
    int main()
    {
    
        int bill=0,price = 0;
    // 定义找零,所给金额,所给面额
    // int bill ;
        printf("请输入需支付金额和面额:\n");
        scanf("%d %d",&price,&bill);
    // printf("请输入你所给的金额:\n");
    // scanf("%d",&bill);
    //当所给金额大于需支付金额
        if(bill >= price)
        {
            printf("需支付%d,您支付了%d,找您%d元!",price,bill,bill-price);
        }
        else
        {
            int cha = price-bill;
            printf("支付失败!需支付%d,您支付了%d,请您再支付%d元!",price,bill,cha);
            char cont;
            printf("是否继续补充金额,\"是\"输入\"y\",\"否\"输入\"n\":");
            getchar();
            scanf("%c",&cont);
            if(cont == 'y')
            {
                int buchajia;
                printf("%d",bill);//测试用
                printf("%d",price);//测试用
                printf("请输入您补充的金额:\n");
                scanf("%d",&buchajia);
                if(buchajia >= cha)
                {
                    printf("您需补的金额为%d,您后续补充支付了%d,找您%d",cha,buchajia,buchajia-cha);
                }
                else
                {
                    printf("您所补充的金额不足,请重新购买!\n");
                    printf("%d",bill);
                    printf("需支付金额%d元,您第一次支付了%d元,还需在支付%d元,您第二次支付了%d元,需总共退还您%d元",price,bill,cha,buchajia,bill+buchajia);
                }
            }
            else
            {
                printf("取消购买。需支付金额%d元,您支付了%d元,退还您%d元",price,bill,bill);
            }
        }
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?