我正在尝试学习C,并且在我最近的代码中遇到了一个我不理解的编译错误。我真的不明白这个错误意味着什么,因此我无法解决问题。我做了大量的谷歌搜索,但不明白我遇到的解释。
有人可以澄清吗?
错误:
代码:
#include <stdio.h>
#include <unistd.h>
#include "plant.h"
double watercredit = 0.0;
int needwater = 200;
double wateredamount = 0.0;
int main()
{
watercredit=215.00;
while(watercredit > 0.0)
{
watercredit--;
if(watercredit < needwater)
{
printf("You need to water the plant!\n");
printf("enter amount of water:\n");
scanf("%lf", wateredamount);
watered(&wateredamount);
//watercredit = watercredit + wateredamount;
wateredamount = 0;
}
if(watercredit == 0)
{
printf("You plant died!");
return 0;
}
printf("Watercredit: %lf\n", watercredit);
sleep(1);
}
return 0;
}
//takes the amount of water added and increases credit
void watered(double* amount)
{
*watercredit = *watercredit + amount;
}
Plant.h:
void watered(double* amount);
答案 0 :(得分:3)
您正在取消引用错误的变量。
如果你看看你的功能被浇水,那么amount
属于double*
类型,即指向双精度的指针。但是,watercredit
是double
类型的全局变量。你不能在double上使用*
运算符,因为它不是指针。
此功能应该有效:
//takes the amount of water added and increases credit
void watered(double* amount)
{
watercredit = watercredit + *amount;
}
答案 1 :(得分:2)
您正在传递amount
作为watered
的指针,而不是watercredit
,这是一个double
(它也是一个全局变量,所以不是一个好主意)。
c声明的一般概念是它们向您展示了如何使用它,以便
double wateredamount = 0.0;
预计将用于a = wateredamount + 1
或wateredamount = 5
等表达式。而
void watered(double* amount)
表示您希望看到像
这样的表达式 thing = *amount
与您的代码实际执行的内容相反