如何修复错误:“格式‘%d’需要‘int’类型的参数,但参数 2 的类型为‘int *’”

问题描述 投票:0回答:2
#include <stdio.h>

int main() 
{
    int year;

    printf("enter year:");
    scanf("%d", &year);

    if (year % 4 == 0) {
        printf("%d is a leap year :", &year);
    }
    else if (year % 100 == 0) {
        printf("%d is a leap year :", &year);
    }
    else if (year % 400 == 0) {
        printf("%d is a leap year :", &year);
    }
    else {
        printf("%d is not a leap year", &year);
    }
    return 0;
}

为什么我会收到此错误:

format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’
c arguments printf
2个回答
1
投票

您的代码的意图似乎是:

  1. 在内存中分配一个

    int
    。它的名字是
    year
    。它驻留在一个称为
    &year
    的地址,它是
    int *
    ,或指向 int 的指针。

  2. scanf
    将确定年份的值。您传递 year
    地址
    ,以便
    scanf
    知道您想要将值存储在哪里。

  3. 现在,完成此操作后,位于

    year
    ,这是一个
    int
    。但是你用
    printf("%d is a leap year :",&year)
    来调用
    &year
    ,这是指向 intint *
    指针。

这正是消息所述的内容。我希望这能帮助您将来解释此类消息,因为它们永远不会真正停止......


1
投票

scanf
printf
功能之间存在显着差异:

  • scanf
    需要一个指向对象的指针(这就是为什么当你想要
    &
    一个
    scanf
    并将其放置在具有
    int
    类型的变量中时需要使用
    int
    ),因为它修改传递给
    scanf
    函数的指针所引用的对象
  • printf
    只想知道参数的value,因为它不会修改它。所以你不使用引用(地址)
    &
    运算符
© www.soinside.com 2019 - 2024. All rights reserved.