#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时都对其强制转换吧,这样太不方便了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)