为什么我的c程序在使用for循环时只产生零答案?

时间:2017-11-25 08:35:40

标签: c

我尝试使用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;
    }

1 个答案:

答案 0 :(得分:0)

此代码存在一些问题,但您几乎就在那里!

首先code阅读需要吃上一个\nsee 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");
}