我尝试使用for循环计算键入的书籍数量并总结其总价格,但最后我只在C程序中获得零价格。我的问题是什么?怎么解决?
#include<stdio.h>
int main(void)
{
int booknum;
float bookfee,bookgst,nogst,totfee,newfee,newfee_nogst;
bookgst=0.0;
nogst=0.0;
int cnt;
char code;
printf("Key in total books purchased >> ");
scanf("%d",&booknum);
for(cnt=1;cnt<=booknum;cnt++)
{
printf("\n\n");
printf("Key in price of the book >> ");
scanf("%f",&bookfee);
printf("Key in type( S=standard gst,Z=zero gst) \n>> ");
scanf("%c",&code);
getchar();
if(code=='S')
{
newfee=bookfee+0.6;
}
else if(code=='Z')
{
newfee_nogst=bookfee;
}
bookgst=bookgst+newfee;
nogst=nogst+newfee_nogst;
printf("\n");
}
totfee=bookgst+nogst;
printf("Book purchased with GST : RM %.2f\n",bookgst);
printf("Book purchased without GST : RM %.2f\n",nogst);
printf("Total payment : RM %.2f\n",totfee);
return 0;
}
答案 0 :(得分:0)
此代码存在一些问题,但您几乎就在那里!
首先code
阅读需要吃上一个\n
(see this),否则代码既不是Z
也不是S
(它是换行符),这就是为什么从未添加费用的原因。
(也搜索“fgets vs scanf”以了解如何使用更安全的fgets
)。
scanf(" %c",&code);
然后这些行
bookgst=bookgst+newfee;
nogst=nogst+newfee_nogst;
添加newfee / newfee_nogst;这些变量在循环之前设置为0
,但是在下一次出现时,它们仍然设置为前一次出现的值,因此要么在循环开始时将它们设置为0
,或者,直接在if
中添加值(见下文)。因为我们在这里,如果代码错误则打印错误(并且可以减去一个cnt
以使用正确的代码再做一个循环,在这种情况下)。
此外,GST计算可能有误,x的6%为0.06 * x
,如果您希望将GST添加到x * 1.06
if(code=='S')
{
bookgst = bookgst + bookfee*1.06; // or bookgst += bookfee*1.06
}
else if(code=='Z')
{
nogst = nogst + bookfee; // or nogst += bookfee
}
else {
printf("Code not understood\n");
}