我创建了一个为用户输入输入的程序,然后让他们输入他们想要输入的数量,但是当我打印总数和金额时。然而,这是在全面反转相同的价值:即
总计:5.00 食物:5.00 账单:5.00 旅行:5.00 fags:5.00
而不是:
总计:14.00 食物:2.00 账单:3.00 旅行:4.00 fags:5.00
int main(void)
{
float food = 0.00;
float travel = 0.00;
float bills = 0.00;
float fags = 0.00;
float total = 0.00;
float t_food, t_travel, t_bills, t_fags;
char userInput[3];
while(userInput[0] != 'X')
{
printf("Select option,\nA: Food\nB: Travel\nC: Bills\nD: Fags\nX: Exit\n");
scanf("%s", userInput);
if((userInput[0] == 'A') || (userInput[0] =='a'))
{
printf("Please enter an amount: ");
scanf("%f", &food);
printf("You have entered: %.2f\n", food);
t_food += food;
}
if((userInput[0] == 'B') || (userInput[0] =='b'))
{
printf("Please enter an amount: ");
scanf("%f", &travel);
printf("You have entered: %.2f\n", travel);
t_travel += travel;
}
if((userInput[0] == 'C') || (userInput[0] =='c'))
{
printf("Please enter an amount: ");
scanf("%f", &bills);
printf("You have entered: %.2f\n", bills);
t_bills += bills;
}
if((userInput[0] == 'D') || (userInput[0] =='d'))
{
printf("Please enter an amount: ");
scanf("%f", &fags);
printf("You have entered: %.2f\n", fags);
t_fags += fags;
}
if((userInput[0] =='X') || (userInput[0] =='x'))
{
total = t_food + t_fags + t_travel + t_bills;
printf("Total: %.2f\n", &total);
printf("Food: %.2f\n", &t_food);
printf("Travel: %.2f\n", &t_travel);
printf("Bills: %.2f\n", &t_bills);
printf("Fags: %.2f\n", &t_fags);
break;
}
}
return 0;
}
有什么想法吗?
答案 0 :(得分:7)
更改
printf("Total: %.2f\n", &total);
printf("Food: %.2f\n", &t_food);
printf("Travel: %.2f\n", &t_travel);
printf("Bills: %.2f\n", &t_bills);
printf("Fags: %.2f\n", &t_fags);
到
printf("Total: %.2f\n", total);
printf("Food: %.2f\n", t_food);
printf("Travel: %.2f\n", t_travel);
printf("Bills: %.2f\n", t_bills);
printf("Fags: %.2f\n", t_fags);
听说编译器,
warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘float *’ [-Wformat]
答案 1 :(得分:1)
将&
放在printf
中,这意味着您传递了值的位置,而不是值本身。
答案 2 :(得分:1)
您应该使用printf
中的值,而不是地址。
答案 3 :(得分:0)
如果您在上一次删除& 代码块,则一切正常
答案 4 :(得分:0)
你也可以通过这个链接来解释为什么printf取值和 Why scanf must take the address of operator
答案 5 :(得分:0)
除了有关printf的先前答案之外,还需要初始化包含总值的浮点变量。类似的东西:
float t_food=0, t_travel=0, t_bills=0, t_fags=0;
...
printf("Total: %.2f\n", total);
printf("Food: %.2f\n", t_food);
printf("Travel: %.2f\n", t_travel);
printf("Bills: %.2f\n", t_bills);
printf("Fags: %.2f\n", t_fags);