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

时间:2018-09-08 05:28:57

标签: c

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

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 specifies type 'int' but the argument has type
  'int *' [-Wformat]
    printf("Total miles saved: %d\n", totalMiles);
                               ~~     ^~~~~~~~~~

您可能想知道为什么dailyMiles函数的数据类型是 void;好吧,我正在调用其他要求用户输入的函数,因此 每当我在主机中调用它时,它都会要求用户输入两次。

4 个答案:

答案 0 :(得分:2)

您不想打印指针本身(totalMiles),而是要打印指向的指针(*totalMiles)。

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

答案 1 :(得分:2)

在功能void dailyMiles(int *totalMiles)
在声明10中:printf("Total miles saved: %d\n", **totalMiles**);

您应该使用totalMiles来代替*totalMiles,因为您创建了整数类型的指针。要访问其中的数据,您必须使用星号运算符*

例如:

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

答案 2 :(得分:1)

在函数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;

}

希望这对您有所帮助。如果无法正常工作,请告诉我。

答案 3 :(得分:0)

您需要“解除引用”您的int*(指针)才能获得int