我正在尝试学习C,并且我复制了计算增值税的代码>我将其修改为重新计算,如果用户回答是,则退出,如果答案为否。令我惊讶的是,它表现得很奇怪,如果答案是肯定的,那么它应该在开始时要求用户输入项目成本。相反,它希望在按下y之后立即输入成本。 下面的代码;
/* VAT Calculation*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
float price_with_vat(float cost, float vat, int quant);
main()
{
float cost, vat, full_price;
int quant,count=0;
char answer[2];
char reply[2]={"y"};
x:
count=count+1;
printf("count= %d\n",count);
printf("Please enter the item cost:\n\n");
scanf("%f", &cost);
printf("\nPlease enter the quantity of product:\n");
scanf("%d", &quant);
printf("\nquantity=%d\n",quant);
/* exit(0); */
printf("\nPlease enter the VAT percentage:\n");
scanf("%f", &vat);
printf("\ncost=%6.2f quant=%d vat=%6.2f\n",cost, quant, vat);
/* exit(0); */
full_price = price_with_vat(cost, vat, quant);
printf("The total price is %6.2f\n\n",full_price);
printf("\nDo you want to perform another transaction? (y/n)\n");
scanf("%c\n", &answer);
if(answer==reply)
{
system("cls");
main();
}
else
return 0;
}
float price_with_vat(float cost, float vat, int quant)
i replace the part
if(answer==reply)
{
system("cls");
main();
}
else
与
if(answer==reply)
goto x
我知道在C(以及Fortran)中不鼓励使用goto构造。我有一个使用do-while循环的变体。它的行为相同。 有什么想法为什么会这样? Zilore Mumba
答案 0 :(得分:1)
您无法在C中将字符串与==
进行比较,因此这是错误的:
if(answer==reply)
您需要使用strcmp()
:
if (strcmp(answer, reply) == 0)
strcmp()
要求两个参数都是以空字符结尾的字符串。你永远不会向answer
添加空终止符;你应该把它初始化为:
char answer[] = { '\0', '\0' };
或者,不是使用reply
的字符串并回答,而是将它们声明为单个字符:
char reply = 'y';
char answer;
然后您可以使用==
来比较它们。
答案 1 :(得分:1)
你的程序中有太多错误。
goto
。 scanf("%c\n", &answer);
语句中,%c
需要char
,但您传递char (*)[2]
。 char reply[2]={"y"};
,这不是有效的C语法。 reply
声明为char
数组,则if(answer==reply)
完全错误。 阅读关于C的好教程或阅读一本好书,了解C的基本语法。
答案 2 :(得分:1)
正如其他评论和答案中所解释的,所提供的代码存在若干问题,例如:
1) goto的使用通常是不必要的,很少使用
2) 从main()内部调用main()。错误。
3) 执行流程在程序主体内没有很好地控制,
导致您所描述的意外行为
4) 比较技术都错了。阅读==
,strcmp()
,!=
等。
以下是类似代码的示例,该代码应该更可预测地执行,说明如何与用户执行简单对话并显示结果。我希望这会对你有所帮助:)
注意:我的环境不需要我#include <conio.h>
,所以我删除了它。您可能需要将其重新添加到您的环境中。
/* VAT Calculation*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float price_with_vat(float cost, float vat, int quant);
int main(void)
{
float cost, vat, full_price;
int quant,count=0;
char answer[2]={""};
float running_total=0.0;
count = 0;
//dialog section of code
while(answer[0] != 'n')
{
//get price, quantity and VAT
printf("Please enter the item cost:");
scanf("%f", &cost);
printf("\nPlease enter the quantity:");
scanf("%d", &quant);
printf("\nPlease enter VAT percentage:");
scanf("%f", &vat);
count++;
//results section
printf("\n\nCost: %6.2f\nQuantity: %d\nVAT percent: %6.2f", cost, quant, vat);
full_price = price_with_vat(cost, vat, quant);
running_total += full_price;
printf("The total price is %6.2f\n\n",full_price);
printf("\nRunning total is currently: %6.2f for %d items.\n",running_total, count);
//request if continue
printf("\nDo you want to perform another transaction? (enter \"y\" or \"n\")\n");
scanf("%s", answer);
}
return 0;
}
float price_with_vat(float cost, float vat, int quant)
{
return cost*((1.0)+vat)*((float)(quant));
}