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

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

你的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;
}



是否继续的逻辑应该用循环去处理比较好。
业务代码放在循环中,并且变量在循环中赋值,每执行一次都会重新赋值。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632