谢夸奖
程序代码:
#include <stdio.h> #define TAX 0.05 char *foodMenu[]= {"fish","chips","hamburgers","with cheese"}; float foodPrice[]= {3.00,2.00,3.00,4.00}; int foodOrder[]= {0,0,0,0}; char *drinkMenu[]= {"soft drinks","coffees or teas"}; float drinkPrice[]= {1.00,1.00}; int drinkOrder[]= {0,0}; int OrderFood(char ** foodMenu,int foodOrder[]); float ComputeFood(int foodOrder[]); int OrderDrink(char ** drinkMenu,int drinkOrder[]); float ComputeDrink(int drinkOrder[]); int main(void) { do { system("cls"); printf("CFOOD FISH && CHIPS && BURGERS\n\n"); OrderFood(foodMenu,foodOrder); OrderDrink(drinkMenu,drinkOrder); float priceFood=ComputeFood(foodOrder); float priceDrink=ComputeDrink(drinkOrder); float priceTotal=priceFood+priceDrink; float tax=TAX*priceTotal; float owing=priceTotal*(1.0+TAX); printf("Total Food\t%5.2f\n",priceFood); printf("Total Drink\t%5.2f\n",priceDrink); putchar('\n'); printf("Total Order\t%5.2f\n",priceTotal); printf("Tax\t\t%5.2f\n",tax); printf("----------------------------\n"); printf("Total owing\t%5.2f\n",owing); float money=0.0; float moneyGet; PAY: printf("\nPlease give me the money:"); while(scanf("%f",&moneyGet)!=1) fflush(stdin); money+=moneyGet; if(money<owing) goto PAY; printf("Amount tendered\t%.2f\n\n",money); float change=money-owing; printf("Chang\t\t%5.2f\n",change); fflush(stdin); } while(getchar()!='N'); return 0; } int OrderFood(char ** foodMenu,int foodOrder[]) { printf("--------FOOD\n"); int i; for(i=0; i<sizeof(foodMenu); i++) { printf("How many orders of %s?\tprice:$%.2f\n",foodMenu[i],foodPrice[i]); while(scanf("%d",&foodOrder[i])!=1) fflush(stdin); } putchar('\n'); return 0; } int OrderDrink(char ** drinkMenu,int drinkOrder[]) { printf("--------DRINK\n"); int i; for(i=0; i<sizeof(drinkMenu)-2; i++)//这里不减2就会出现越界读取的问题,不知道为什么,在OrderFood函数里也有类似一句,但它工作正常,我猜应该会有隐含的问题,望高手解答,谢谢 { printf("How many %s?\tprice:$%.2f\n",drinkMenu[i],drinkPrice[i]); while(scanf("%d",&drinkOrder[i])!=1) fflush(stdin); } putchar('\n'); return 0; } float ComputeFood(int foodOrder[]) { float total=0.00; int i; for(i=0; i<sizeof(foodPrice)/sizeof(float); i++) { total+=(foodOrder[i]*foodPrice[i]); if(i==3) { total-=(foodOrder[3]*foodPrice[2]); total+=(foodOrder[3]*foodPrice[5]); } } return total; } float ComputeDrink(int drinkOrder[]) { float total=0.00; int i; for(i=0; i<sizeof(drinkPrice)/sizeof(float); i++) { total+=(drinkOrder[i]*drinkPrice[i]); } return total; }
代码已完成,请高手看看注释处的问题
[ 本帖最后由 心灯甚亮 于 2013-2-9 23:20 编辑 ]