C printf在调用通过引用传递变量的函数时发出警告

C printf在调用通过引用传递变量的函数时发出警告,c,C,我有两个函数,一个函数通过引用传递变量,另一个函数返回结果 void dailyMiles(int *totalMiles) { int milesDriven, totalDays, totalPeople; peopleInVehicle(&totalPeople); //calling other function daysPerWeek(&totalDays); // calling other function printf("En

我有两个函数,一个函数通过引用传递变量,另一个函数返回结果

void dailyMiles(int *totalMiles)
{

    int milesDriven, totalDays, totalPeople;

    peopleInVehicle(&totalPeople); //calling other function
    daysPerWeek(&totalDays); // calling other function

    printf("Enter the amount of miles driven per day: \n");
    scanf("%d", &milesDriven);


    *totalMiles = (milesDriven * totalDays * 52 / totalPeople) * 2;

    printf("Total miles saved: %d\n", totalMiles);

    return;
}

int outputMiles()
{
    int totalMiles;

    dailyMiles(&totalMiles);

    return totalMiles;
}
我很难弄明白为什么它会在终端上给我这个警告:

main.c:38:36:warning:format指定类型“int”,但参数的类型为
“int*”[-Wformat]
printf(“保存的总英里数:%d\n”,总英里数);
~~     ^~~~~~~~~~
您可能想知道为什么
dailyMiles
函数的数据类型是
无效
;嗯,我正在调用其他要求用户输入的函数,所以
每当我在main中调用它时,它都会要求用户输入两次。

你需要“取消引用”你的
int*
(指针)来获得
int
,你需要“取消引用”你的
int*
(指针)来获得
int

你不想打印指针本身(
totalMiles
),您想打印它指向的内容(
*totalMiles


您不希望打印指针本身(
totalMiles
),而是希望打印指针指向的内容(
*totalMiles


在函数totalMiles dailyMiles(int*totalMiles)中,totalMiles是指向整数的指针。因此,要打印其值,只需在totalMiles前面添加*即可,如下所示:

void dailyMiles(int *totalMiles)
{

int milesDriven, totalDays, totalPeople;

peopleInVehicle(&totalPeople); //calling other function
daysPerWeek(&totalDays); // calling other function

printf("Enter the amount of miles driven per day: \n");
scanf("%d", &milesDriven);


*totalMiles = (milesDriven * totalDays * 52 / totalPeople) * 2;

printf("Total miles saved: %d\n", *totalMiles);

return;
}


希望这对你有帮助。如果它不工作,请告诉我。

在函数totalMiles dailyMiles(int*totalMiles)中,totalMiles是指向整数的指针。因此,要打印其值,只需在totalMiles前面添加*即可,如下所示:

void dailyMiles(int *totalMiles)
{

int milesDriven, totalDays, totalPeople;

peopleInVehicle(&totalPeople); //calling other function
daysPerWeek(&totalDays); // calling other function

printf("Enter the amount of miles driven per day: \n");
scanf("%d", &milesDriven);


*totalMiles = (milesDriven * totalDays * 52 / totalPeople) * 2;

printf("Total miles saved: %d\n", *totalMiles);

return;
}


希望这对你有帮助。如果它不起作用,请告诉我。

在函数中
无效每日英里数(int*totalMiles)

在语句10中:
printf(“保存的总英里数:%d\n”,**总英里数**)

您应该使用
*totalMiles
而不是使用
totalMiles
,因为您创建了一个整数类型指针。要访问其中的数据,您必须使用星号运算符,即*

例如:

int *totalMiles;
...
...
...
printf("Total miles saved: %d\n", *totalMiles);

在函数
void dailymeles(int*totalMiles)

在语句10中:
printf(“保存的总英里数:%d\n”,**总英里数**)

您应该使用
*totalMiles
而不是使用
totalMiles
,因为您创建了一个整数类型指针。要访问其中的数据,您必须使用星号运算符,即*

例如:

int *totalMiles;
...
...
...
printf("Total miles saved: %d\n", *totalMiles);

我真正想知道的是,当你的问题可以简化为
void foo(int*miles){printf(“%d”,miles);}
@melpomene这是一个拼车任务的一部分,因此是另一个代码。但你的问题不是关于你的任务,而是关于这个特定的警告。当您对所编写代码的行为有疑问时,您应该创建一个。“最小”意味着代码中所有不必要的部分都应该删除。我实际上想知道的是,当你的问题可以简化为
void foo(int*miles){printf(“%d”,miles);}
@melpomene这是一个拼车任务的一部分,因此是另一个代码。但你的问题不是关于你的任务,是关于这个特别的警告。当您对所编写代码的行为有疑问时,您应该创建一个。“最小”表示应删除代码的所有非必要部分。