C语言的写一个100元循环购买东西的小程序,谢谢大家了

C语言的写一个100元循环购买东西的小程序,谢谢大家了,第1张

#include <stdio.h>

#define MAX_GOODS 100

typedef struct goods

{

    int cnt

    int price

}GOODS_T

int main(int argc, char *argv[])

{

    int money_all = 0

    int money_now = 0

    int i = 0

    GOODS_T goods[MAX_GOODS] = {0}

    

    printf("请输入预算:")

    scanf("%d", &money_all)

    

    while(i < MAX_GOODS)

    {

        printf("请输入项目和价格:")

        scanf("%d %d", &goods[i].cnt, &goods[i].price)

        money_now += (goods[i].cnt * goods[i].price)

        if (money_now == money_all)

        {

            printf("您的剩余预算是0。\n")

            break

        }

        else if (money_now > money_all)

        {

            money_now -= (goods[i].cnt * goods[i].price)

            printf("你不能买最后的东西。\n")

            printf("您的剩余预算是%d。\n", money_all - money_now)

            break

        }

        

        i++

    }

    return 0

}

要注意的是,这份代码里输入项目和价格时用空格来区分数量和单价,不能用标点符号,如:请输入项目和价格:10  4

你定义p为int类型,输入的格式也是%d,这些都是对的

但是当你输入一个浮点数,比如5.6时,scanf从缓存区读取数据5,遇到小数点结束读取,此时缓存区数据为.6,第二次循环因为缓存区存在数据,不在接受键盘输入,而是直接从缓存区读取数据,但是遇到小数点读取失败,而p的值仍是5,输出图案,进入下一个循环.....无限死循环.....

其实这就是由于使用scanf时输入的数据类型和需要的数据类型不匹配造成的。

http://hi.baidu.com/gsyhjcqhgwbcizq/item/0038048367904beab0715443

解决方式是在每次循环之后,情况缓存区,fflush(stdin)

如果修改定义p为float,你需要另定义一个int pp,来保存p的整数部分,因为不可能在以后的程序中使用p时都对其强制转换吧,这样太不方便了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8064121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存